Я делаю немного калькулятора в C, и я хочу передать простые арифметические формулы своей программе. Но этому действительно не нравлюсь я передающий символ '*' к моей программе. Почему нет? И как я могу работать вокруг этого, не изменяя Астерикса на что-то еще?Спасибо
Символ *
- это триггер оболочки для раскрытия совпадающих имен файлов.
Есть несколько способов справиться с этим:
mycalc 5 \ * 3
myprog «5 * 3»
*
расширяется, чтобы соответствовать всем файлам в текущем каталоге (это называется «подстановкой»). Вам необходимо заключить в кавычки или экранировать *, либо использовать другой символ.
* вызовет глоббинг и расширится на все файлы в каталоге, в котором вы находитесь. Просто заключите * в кавычки и запустите вашу программу, например
./yourprogram '10 * 10'
или
./yourprogram 10 '*' 10
В первом случае вашей программе будет передан только 1 аргумент, argv[1] будет строка "10 * 10", во втором случае вам будет передано 3 аргумента
Командная оболочка Linux (bash, tcsh, ksh и т. Д.) Расширит "*" в список файлов еще до того, как ваша программа его увидит. С этим мало что можно сделать - вы можете попросить пользователей заключить звездочку в одинарные кавычки, экранировать ее с помощью обратной косой черты или использовать вместо нее «x». Ни один из них не особо удобен для пользователя.
Это самая первая ошибка Valgrind или есть предыдущие?
Я предполагаю, что есть предыдущие, и одна из них разрушает память и заставляет бросок сломаться.
-121--4043383-Не вижу свой код Nir, и у меня нет прав на редактирование, так что здесь он снова:
Секрет закладывается в endPlay с установкой: moveyPlayer.initialPlayBackTime = -1; перед выпуском. Попробуйте::)
-(void)playMovie:(NSString *)urlString{ movieURL = [NSURL URLWithString:urlString];
moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];
moviePlayer.initialPlaybackTime = 0;
//Register to receive a notification when the movie has finished playing.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(endPlay:) name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer];
moviePlayer.scalingMode = MPMovieScalingModeAspectFit;
moviePlayer.movieControlMode = MPMovieControlModeDefault;
moviePlayer.backgroundColor = [UIColor blackColor];
[moviePlayer play];
}
-(void)endPlay: (NSNotification*)notification{
[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer];
moviePlayer.initialPlaybackTime = -1;
[moviePlayer stop];
[moviePlayer release];
}
-121--2823213- Приложение «calc», которое можно извлечь из репозиториев deb apt-get install calc, может оценить 3 * 3, но не 3 * 3
Попробуйте экранировать его, звездочка - специальный символ в C
Замените * на \*
Последняя неупомянутая техника. Вместо кавычек/запятых при каждом использовании, вы можете отключить globbing. Таким образом, если вы хотите часто использовать калькулятор, вам не придется экранировать каждое использование:
# For bash
set -o noglob
# For csh/tcsh
set noglob
# Now that noglob is set, you can safely use *
calc 3 * 3
*
оценивается как «все в текущем каталоге» в bash. Однако .
работает правильно и часто используется как символ умножения в математике, особенно скалярного умножения.