#c #scanf
Вопрос:
Здесь, если вы использовали два спецификатора формата в функции сканирования, но это происходит только после взятия трех чисел, хотя сохраняются только два числа.Я не знаю, почему он ждет ненужного 3-го числа.
#include <stdio.h>
int main(){
int a ,b ;
printf("Enter values of a and b ");
scanf(" %d %d " , amp;a ,amp;b );
printf("a = %d b = %d" ,a ,b);
return 0;
}
Комментарии:
1. Без видимой причины у вас возникли проблемы, хотя
if (scanf ("%d %d", amp;a ,amp;b) != 2) { fputs ("error: invalid integer input.n", stderr); return 1; }
вы добавили проверку и удалили ненужное пространство из строки формата. было бы лучше.2. Почти уверен, что конечный пробел означает «потребляйте пробелы до тех пор, пока не будет обнаружен пробел, и только затем возвращайтесь».
3. Кстати: в общем, вы обнаружите, что все намного проще, если вы используете
getline
followed bysscanf
. Таким образом, у вас будет больше контроля над тем, что происходит, когда пользователь нажимает enter.4. Или, по крайней мере
fgets()
, с буфером соответствующего размера (массив символов), а затемsscanf()
с использованием буфера в качестве первого аргумента. (fgets()
вместоgetline()
того, чтобы устранять необходимостьfree()
в выделенном буфере) Единственным недостаткомfgets()
orgetline()
является то, что оба значения должны быть введены в одной строке. Приscanf()
этом они могут быть разделены таким количеством пустых строк, как вам нравится.5. изменить
scanf(" %d %d " , amp;a ,amp;b );
наscanf("%d %d", amp;a ,amp;b );
Ответ №1:
почему он ждет ненужного 3-го числа.
" %d %d "
указывает scanf()
дождаться некоторого небелого пробела после 2 int
, чтобы узнать, что все конечные пробелы заполнены.
" %d %d"
приказывает scanf()
вернуться после 2 int
.
Начальное пространство и второе на самом деле избыточны, так %d
как считывает и игнорирует пробелы перед числом, поэтому вы можете просто написать:
scanf("%d%d", amp;a, amp;b);
но вы также должны проверить, что scanf()
возвращает 2
данные, указывающие на 2 успешных преобразования.
Вот измененная версия:
#include <stdio.h>
int main() {
int a, b;
printf("Enter values of a and b: ");
if (scanf("%d%d", amp;a, amp;b) == 2) {
printf("a = %d, b = %dn", a, b);
} else {
printf("invalid inputn");
}
return 0;
}
Ответ №2:
у меня нет этой проблемы, когда я вставляю код в эту ссылку https://c.runoob.com/compile/11
Комментарии:
1. То есть
stdin
, вход заканчивается.