static int i=0;
int main(){
char str[80][80];
int j;
while(scanf("%s",str[i++])!=EOF){
}
for(j=i-1;j>0;j--){
printf("%s",str[j]);
printf(" ");
}
printf("%s\n",str[0]);
printf("%d",i);
return 0;
}
如果把
while(scanf("%s",str[i++])!=EOF){
}
改为
while(scanf("%s",str[i])!=EOF){
i++;
}
结果就正确了
一直不太明白,还请指教~
当你的这个循环
while(scanf("%s",str[i++])!=EOF){
}
里的 实际上参与判断的是i ,不是i++后的值 ,也就是当i =3的时候,不再执行循环体里面的代码,而i 却++了1次,输出的就是4
下面的
while(scanf("%s",str[i])!=EOF){
i++;
}
这种写法,当i=3的时候,条件不成立,i++不会被执行,输出的是3。
可以把上面的那个循环改成
while(scanf("%s",str[++i])!=EOF){
}
这样结果也是对的了
明白了,感谢!
i++和++i的顺序问题
你的输出的这一部分是这样写的:
for(j=i-1;j>0;j--){
printf("%s",str[j]);
printf(" ");
}
也就是说,str数组从1开始到i-1。那么,存储的时候,从1开始存储。
而你的代码
while(scanf("%s",str[i++])!=EOF){
}
这样你的数组存储是从0开始存储的,输出时才会出错。
应该改为
while(scanf("%s",str[++i])!=EOF){
}
这样一开始进入循环时,i就是1。
提一个建议,最好在提问的时候使用代码块标记代码,方便复制和查看,如下:
#include <stdio.h>
#include <string.h>
static int i=0;
int main(){
char str[80][80];
int j;
while(scanf("%s",str[i++])!=EOF){
}
for(j=i-1;j>0;j--){
printf("%s",str[j]);
printf(" ");
}
printf("%s\n",str[0]);
printf("%d",i);
return 0;
}
@计算机知识杂谈: 好的,感谢!