我正在尝试下面的代码。但是当我输入整数时,程序不要求输入字符。程序执行 printf 行。我应该如何避免上述问题?
#include <stdio.h>
void main()
{
char a[5];
int p;
printf("data\n");
scanf("%d",&p);
scanf ("%c",&a);
printf("--> %c %d\n",a,p);
}
像这样放一个空格scanf
:
scanf (" %c",&a);
^-------note
这样尾随的换行符就被吃掉了。一旦你在给出整数输入后按回车键 - 缓冲区中有一个尾随换行符,第二次调用将scanf
读取该字符。同样main
按照 ISO 应该返回int
这个说法也是不正确的:
char a[5];
printf("--> %c %d\n",a,p);
您正在读取一个字符并打印一个数组。你只需要:
char a;
printf("--> %c %d\n",a,p);
如果要读取(或输入)字符数组,请使用fgets
. 对于char a[5]
做类似的事情:
fgets (a, 5 , stdin)
由于 fgets 是缓冲区安全的。