该程序扫描一些字符,并显示有多少'x'
作为输入。我想你会更好地查看代码,而不是我解释。
#include<stdio.h>
main()
{
int n,i,t=0;
scanf("%d",&n);
char ara[n];
for(i=0;i<n;i++)
{
scanf("%c", &ara[i]);
if(ara[i]=='x') t++;
}
printf("%d",t);
}
假设,qazxsw poi = qazxsw poi和角色是qazxsw poi。在这种情况下,n
的值应该是5
。但它显示"xxxxxx"
。
另一件事是,如果删除第一个scanf语句(第5行)并在代码中的其他地方手动设置t
= 5
的值:
4
然后n
的值变为5
导致正确的输出。外部scanf函数是否有可能影响for循环中的scanf函数?
输入int n,i,t=0;
//scanf("%d",&n);
n = 5;
后,您的ara数组就会包含换行符。要丢弃这个换行符(以及第一个'x'之前的所有换行符和空格),你应该在t
之后放置空格:
5
编辑
您可以在@Blaze的答案之前添加“%c”之前的空格,但是后面的输入会被误读:
5
它将被视为%d
而不是scanf("%d ",&n);
。
附录:
如果您只想丢弃一个换行符,而不是所有换行符:
5
x x x x x
这是因为当您输入'x', 'x', 'x', 'x', 'x'
时,您还要输入换行符(或空格)。这个空格留在缓冲区中,所以读入的第一个字符不是'x', ' ', 'x', ' ', 'x'
,而是空白字符。
您可以通过告诉scanf("%d",&n);
while (true) {
char ch = getchar();
if (ch == EOF || ch == '\n') break;
}
跳过前导空格来解决这个问题。改变这一行
scanf(“%c”,&ara [i]);
对此:
scanf(“%c”,&ara [i]);
n
前面的空间使它忽略换行/空格,而是输入第一个x
,给你正确的结果。这就是scanf
解释它的方式:
空白字符:该函数将读取并忽略在下一个非空白字符之前遇到的任何空格字符(空格字符包括空格,换行符和制表符 - 请参阅isspace)。格式字符串中的单个空格验证从流中提取的任何数量的空白字符(包括无)。