【发布时间】:2020-07-01 23:00:17
【问题描述】:
#define len 100
char sourceString[len];
char command;
int main(void)
{
while (1)
{
printf("\nEnter source: ");
fgets(sourceString, len, stdin); // this gets skipped on second loop.
printf("\nEnter command: ");
scanf(" %c", command)
switch (command)
{
case 'A':
printf("%s", sourceString);
break;
case 'B':
printf("filler");
break;
default:
break;
}
}
return 0;
}
无论我使用 fgets 还是 scanf,字符串总是在第二个循环中被跳过。 我尝试在第二个 scanf "%c" 中添加一个空格,但它仍然跳过字符串输入,是的,我尝试读取一行然后读取一个字符。
【问题讨论】:
-
fgets正在使用换行符,因此您的scanf绝对不需要(如果没有害处 - 因为它使用不正确)。甚至不清楚您要在这里做什么。读一行然后读一个字符?还是什么? -
" 甚至不清楚您要在这里做什么。先读一行然后读一个字符?"是的,这就是我想要做的。
-
嗯,混合输入法通常是个坏主意。使用
fgetc而不是scanf。 -
对两者都使用
fgets(),只需取消引用包含command的数组即可获取第一个字符——确保读取完整的行。
标签: c while-loop scanf