#include <stdio.h>
int main(){
int l,m,q,j;
char option;
scanf("%d",&q);
printf("%d\n",q);
for(j=0;j<q;j++){
scanf("%c %d %d",&option,&l,&m);
printf("%c %d %d",option,l,m);
}
return 0;
}
输出:
3(Input)
3
C 1 4(Input)
0 -374066224C 1 4
上述代码有什么问题?它没有给出预期的输出。
答案 0 :(得分:9)
来自初始scanf()
(以及后续scanf()
)的输入流中仍有换行符:这将分配给option
和随后的int
分配将失败,因为C
不是int
,意味着l
和m
是未初始化的int
变量。
要跳过它,请在scanf()
循环中的for
的格式说明符中添加一个前导空格字符:
scanf(" %c %d %d",&option,&l,&m);
/* ^ */
scanf()
的返回值是成功分配的次数:检查它以确保进行3
分配。
if (3 == scanf(" %c %d %d",&option,&l,&m))
{
/* Valid input. */
}
答案 1 :(得分:2)
每次提示用户输入时,他们都会写入,然后按回车键。 Enter在输入缓冲区中留下换行符。您必须在要求输入字符之前将其丢弃,否则它将以您的字符变量结束。
简单但直率的解决方案就是:
scanf("%d",&q); getchar();
printf("%d\n",q);
for(j=0;j<q;j++){
scanf("%c %d %d",&option,&l,&m); getchar();
printf("%c %d %d",option,l,m);
}
(我很确定这个地方有一个C FAQ,但我找不到链接。)