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

时间:2018-05-28 10:08:53

标签: c loops

#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&lt; n 这里需要n-1个输入。但为什么? 从0,1,2,3 ...(n-1)开始,不需要n次输入吗? 例如,如果给出4则输入3个而不是4个。

1 个答案:

答案 0 :(得分:0)

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

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

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