Я запускаю следующую программу на c
char str[80] = "String";
printf("hello %s\n", str);
scanf("%s", str);
printf("%s\n", str);
scanf("%[ABCDEF]", str);
printf("hello %s\n", str);
return 0;
По какой-то причине в строке 5, когда предполагается ввод из шаблона% [ABCDEF], консоль просто печатает предыдущую строку (ввод из строки 3). Почему это так?
1 ответ
Причина в том, что первый вызов scanf не читает символ новой строки, а второй вызов scanf просто читает этот символ новой строки. Чтобы избежать этого, начинайте строку формата с пробела, подобного этому:
#include <stdio.h>
int main(void)
{
char str[80] = "String";
printf("hello %s\n", str);
scanf("%s", str);
printf("%s\n", str);
scanf(" %[ABCDEF]", str);
printf("hello %s\n", str);
return 0;
}
Однако вам также необходимо убедиться, что str не переполняется, если пользователь вводит строку длиной более 79 символов.
Похожие вопросы
Новые вопросы
c
C - это язык программирования общего назначения, используемый для системного программирования (ОС и встраиваемых), библиотек, игр и кроссплатформенности. Этот тег следует использовать с общими вопросами, касающимися языка C, как это определено в стандарте ISO 9899 (последняя версия 9899: 2018, если не указано иное, а также для запросов, специфичных для версии, с c89, c99, c11 и т. Д.). C отличается от C ++ и не должен сочетаться с тэгом C ++ без разумной причины.