我有以下程序:int main(int argc,char *argv []){int a,b; char c1,c2; printf(\'输入一些内容:\'); scanf(\'%d \',&a); //第 1 行 printf(&q ...
我有以下程序:
int main(int argc, char *argv[])
{
int a, b;
char c1, c2;
printf("Enter something: ");
scanf("%d", &a); // line 1
printf("Enter other something: ");
scanf("%d", &b); // line 2
printf("Enter a char: ");
scanf("%c", &c1); // line 3
printf("Enter another char: ");
scanf("%c", &c2); // line 4
printf("Done"); // line 5
system("PAUSE");
return 0;
}
正如我在 C 书中读到的,作者说 scanf()
在缓冲区中留下了一个换行符,因此,程序不会在第 4 行停止让用户输入数据,而是存储换行符 c2
并移动到第 5 行。
是吗?
但是,这种情况只发生在 char
数据类型上吗?因为我没有 int
在第 1、2、3 行中看到数据类型的这个问题。对吗?
另一个选项(我从 这里 赋值抑制选项 读取并丢弃换行符 。为此,我们只需设置一个格式来读取在 %
和 c
:
scanf("%d%*c",&a); // line 1
scanf("%c%*c",&c1); // line 3
scanf
然后将读取下一个字符(即换行符)但不会将其分配给任何指针。
但最后,我还是同意 常见问题解答中的最后一个选项 :
或者,根据您的要求,您也可以忘记 scanf()/getchar(),使用 fgets() 从用户那里获取一行文本并自己解析。