首页 新闻 会员 周边

关于说反话,我的代码有点问题

0
[已解决问题] 解决于 2021-11-27 16:59

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;
}

如果把
while(scanf("%s",str[i++])!=EOF){
}
改为
while(scanf("%s",str[i])!=EOF){
i++;
}
结果就正确了

一直不太明白,还请指教~

翻白眼嗯嗯嗯的主页 翻白眼嗯嗯嗯 | 菜鸟二级 | 园豆:204
提问于:2021-11-27 00:13
< >
分享
最佳答案
0

当你的这个循环
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){
}
这样结果也是对的了

奖励园豆:5
中华鲟3670 | 小虾三级 |园豆:847 | 2021-11-27 13:47

明白了,感谢!

翻白眼嗯嗯嗯 | 园豆:204 (菜鸟二级) | 2021-11-27 17:01
其他回答(1)
0

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。

计算机知识杂谈 | 园豆:470 (菜鸟二级) | 2021-11-27 15:56

提一个建议,最好在提问的时候使用代码块标记代码,方便复制和查看,如下:

#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;
}
支持(1) 反对(0) 计算机知识杂谈 | 园豆:470 (菜鸟二级) | 2021-11-27 15:58

@计算机知识杂谈: 好的,感谢!

支持(0) 反对(0) 翻白眼嗯嗯嗯 | 园豆:204 (菜鸟二级) | 2021-11-27 17:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册