#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个。
答案 0 :(得分:0)
执行scanf("%d",&n);
时,它会使用输入中的数字,但会保留以下字符。此角色可能是换行符。然后,当gets
执行时,它会读取此换行符。因此,它将此作为一个完整的行放入sr[0]
- 只是换行符而不是其他字符。你的循环没有执行n-1
次;它执行n
次,但第一行是空白的。
解决此问题的最简单方法是将scanf("%d",&n)
更改为scanf("%d ",&n);
。 %d
告诉scanf
使用空白字符后的空格,这将删除输入中的换行符。
但是,它也会删除下一行开头的空格。如果您不想这样,请保持scanf
不变,但插入代码以读取(和忽略)字符,直到它读取换行符。