我正在尝试从用户t
输入两个字符。这是我的代码:
int main()
{
int t;
scanf("%d",&t);
char a,b;
for(i=0; i<t; i++)
{
printf("enter a: ");
scanf("%c",&a);
printf("enter b:");
scanf("%c",&b);
}
return 0;
}
奇怪的是,第一次输出是:
enter a:
enter b:
也就是说,代码不会等待a
的值。
答案 0 :(得分:7)
问题是scanf("%d", &t)
在输入缓冲区中留下了一个换行符,该换行符仅由scanf("%c", &a)
使用(因此a
被赋予换行符)。您必须使用getchar();
消费换行符。
另一种方法是在scanf()
格式说明符中添加一个空格来忽略前导空白字符(包括换行符)。例如:
for(i=0; i<t; i++)
{
printf("enter a: ");
scanf(" %c",&a);
printf("enter b: ");
scanf(" %c",&b);
}
如果您更喜欢使用getchar()
来使用换行符,则必须执行以下操作:
for(i=0; i<t; i++)
{
getchar();
printf("enter a: ");
scanf("%c",&a);
getchar();
printf("enter b:");
scanf("%c",&b);
}
我个人认为前一种方法更优越,因为它忽略任意数量的空格,而getchar()
只消耗一种空格。
答案 1 :(得分:0)
通过查看你的代码它是完美的它应该读取T次A和B,但每次循环时它都会替换A和B.
使用数组或哈希表有效存储
答案 2 :(得分:0)
scanf
使用的某些格式会从stdin
修剪换行符,但其他格式不会。使用"%d"
阅读属于后一类。在阅读
'\n'
scanf("%c", &a);