gpt4 book ai didi

c - 循环 n-1 次而不是 n 次。为什么?

转载 作者:行者123 更新时间:2023-11-30 21:06:09 24 4
gpt4 key购买 nike

#include <stdio.h>
#include <string.h>
int main()
{
int n,m,i,k;
scanf("%d",&n);
char sr[101][101];
for(i=0;i<n;i++)
{
gets(sr[i]);
}
for(k=0;k<n;k++)
{
m = strlen(sr[k]);
if(m>10)
{
printf("%c%d%c\n",sr[k][0],(m-2),sr[k][m-1]);
}
else
{
puts(sr[k]);
}
}

return 0;
}

如果我在这里使用 i < n ,它将接受 n-1 个输入。但为什么?从 0,1,2,3...(n-1) 出发,难道不应该需要 n 次输入吗?例如,如果给 4,则需要 3 个输入,而不是 4 个。

最佳答案

scanf("%d",&n); 执行时,它会消耗输入中的数字,但留下后面的字符。该字符可能是换行符。然后,当 gets 执行时,它会读取这个换行符。因此,它将其作为一个完整的行放入 sr[0] 中——只是一个换行符,没有其他字符。您的循环不会执行 n-1 次;它执行n次,但第一行是空白的。

解决此问题的最简单方法是将 scanf("%d",&n) 更改为 scanf("%d ",&n);%d 后面的空格告诉 scanf 使用空白字符,这将从输入中删除换行符。

但是,它也会删除下一行开头的空格。如果您不想这样做,请保留 scanf 不变,但插入代码来读取(并忽略)字符,直到它读取换行符。

关于c - 循环 n-1 次而不是 n 次。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50563932/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com