【发布时间】:2023-03-31 12:00:01
【问题描述】:
我的程序包含 character 的输入代码,但在调试过程中没有考虑它。
它考虑其他数据类型(int、float 等)的输入
程序:
#include<stdio.h>
int main()
{
int n,i=0;
char c;
scanf("%d",&n);
int a[20];
while(1)
{
scanf("%c",&c);
if(c=='\n')
break;
else
{
if(c!=32)
a[i++]=c-48;
}
}
for(i=0;i<10;i++)
printf("%d ",a[i]);
return 0;
}
【问题讨论】:
-
我建议
scanf("%c",&c);应该是scanf(" %c",&c);加上一个空格来清除前导空格。请参阅 scanf() leaves the newline char in buffer? 大多数格式说明符,如%d和%f会过滤掉前导空格,但%c不会,除非你用空格指示它。 -
旁白:
c-48暗示有 ASCII 编码,你想提取一个数字,在这种情况下,c - '0'既清晰又便携。 -
@user3121023 是的,但这可能会使一行中输入的多个字符混淆,可能会有多个空格分隔。
" %c"干净可靠。 -
@user3121023 我不明白你的“换行符”的概念。
scanf的数据可以全部输入一行。如果你想要一个空行来停止输入,我建议像往常一样使用fgets。 -
@user3121023 我明白了,first
%c条目将在循环之前的%d条目之后拾取换行符。