2014-09-16 3 views
0

Вопрос кажется относительно прямым и базовым. Похоже, что это было бы задано раньше, но я не мог найти ничего с помощью поисковых систем. В значительной степени мне нужно, чтобы пользователь вводил несколько переменных, и я сохраняю их в одном сканировании. Я новичок в C, поэтому не был уверен, почему это не работает. Я знаю, что это что-то новичок, но, будучи новичком в C, я не уверен.Использование scanf для сканирования нескольких символов и ints сразу

В значительной степени пользователь вводит что-то вроде «* 2 4», но по некоторым причинам значения переменных никогда не будут изменены в следующем методе.

Даже если я положил printf("Values are %d and %d", &start, &end); сразу после сканирования, значения по-прежнему не меняются.

char symb; 
int start, end; 
printf("Enter a symbol, a start point, and an end point : "); 
scanf("%c %d %d", &symb, &start, &end); 
do_function(symb, start, end); 
+0

то, что 'symb' здесь ?. предоставить do_function() body – Rustam

+0

«Я ничего не мог найти с помощью поисковых систем» - затем прочитайте страницу руководства (или некоторую другую документацию) о функции, которую вы хотите использовать. – mafso

+0

oh извините, что это была только ошибка копирования. Я починил это. И do_function просто распечатывает значения символа, начала и конца. Но значения никогда не меняются от функции funtion – Mark

ответ

0

Вы можете проверить, если scanf() удалось путем проверки его возвращаемое значение; если он не возвращает 3, ваш код не сможет продолжить, поскольку значения не были отсканированы.

+0

в моем методе do_function, он выводит значения переданных переменных и никогда не изменяется из функции сканирования, поэтому я спрашивал здесь, что я делал неправильно – Mark

0

Добавить место до "%c", чтобы использовать предыдущее белое пространство и проверить результаты scanf().

if (scanf(" %c %d %d", &symb, &start, &end) != 3) { 
    puts("Bad input"); 
    exit (-1); 
} 

scanf("%c %d %d", &symb, &start, &end) потребляет любойchar и сохраняет его в symb. Часто это '\n' от предыдущей строки. Затем попытка считывания числа останавливается на '*'.

Лучше всего прочитать всю строку, а затем отсканировать ее.

char buf[100]; 
if (fgets(buf, sizeof buf, stdin) == NULL) Handle_IOErrorOrEOF(); 
if (sscanf(buf, " %c %d %d", &symb, &start, &end) != 3) { 
    puts("Bad input"); 
    exit (-1); 
} 
do_function(symb, start, end); 

Примечание: " %c %d %d" может быть " %c%d%d" как все спецификаторы кроме "%c", "%n" и "%[" потребляют ведущие пробельные даже без ведущего " ".

0

понял, что это было неправильно с моими методами печати (был амперсандами, когда это не нужно)

Смежные вопросы