鱼C论坛

 找回密码
 立即注册
查看: 1023|回复: 11

[已解决]c语言求助

[复制链接]
发表于 2021-1-17 21:31:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 monkey__ 于 2021-1-18 13:53 编辑
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main(){

  4.         int i=0,index=-1,len=0;
  5.         char str[21];
  6.         char c;

  7.         printf("请输入一行文本:");

  8.         do{
  9.                 c=getchar();
  10.                 str[i]=c;
  11.                 if(c==' ' && i<=21 ){
  12.                         index=i;
  13.                         printf("index is %d\n",index);
  14.                 }
  15.                 i++;
  16.         }while(c!='\n');

  17.         printf("index=%d\n",index);

  18.         str[i]='\0';

  19.         return 0;
  20. }
复制代码



=======================================

[root@izuf6a4zmhsiohb749shfaz s1e19]# gcc test.c && ./a.out
请输入一行文本:Hold on your hats. Ladies and gentlemen.
index is 4
index is 7
index is 12
index is 18
index=10

请问为什么index莫名其妙的变成了10???

补充下环境:
CentOS Linux release 7.7.1908 (Core)
gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
最佳答案
2021-1-18 14:00:34
本帖最后由 风过无痕1989 于 2021-1-18 15:05 编辑
monkey__ 发表于 2021-1-18 13:51
谢谢您的指正,这个好像是没用代码框的问题~


修改后,运行就正常了。但你要输入的字符串:Hold on your hats. Ladies and gentlemen. 的长度,你自己可以数一数,超过21个字符

你最后一行输出 index = 10,是因为程序的第 15 行的条件:&& i <= 21

故你的程序要完全正确地运行,还得修改两处:第 7 行修改为 char str[50],第 15 行修改为 if(c == ' ' && i <= 40 )
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-17 22:20:41 | 显示全部楼层
VS2015运行无此问题D:\FishC\yuanc.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-18 09:51:36 | 显示全部楼层
战机智 发表于 2021-1-17 22:20
VS2015运行无此问题

好吧 = - 我这一脸懵逼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-18 12:53:53 | 显示全部楼层
本帖最后由 风过无痕1989 于 2021-1-18 15:32 编辑
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main() {

  4.         int i = 0, index = -1, len = 0;
  5.         char str[50];
  6.         char c;

  7.         printf("请输入一行文本:");

  8.         do {
  9.                 c = getchar();
  10.                 str[i] = c;            // 错误!str 是字符数组名,不能其赋值,需改为:str[i]
  11.                 if (c == ' ' && i <= 50) {
  12.                         index = i;
  13.                         printf("index is %d\n", index);
  14.                 }
  15.                 i++;
  16.         } while (c != '\n');

  17.         index = i;
  18.         printf("index=%d\n", index);

  19.         str[i] = '\0';               // 错误!str 是字符数组名,不能其赋值,需改为:str[i]

  20.         return 0;
  21. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-1-18 13:51:48 | 显示全部楼层


谢谢您的指正,这个好像是没用代码框的问题~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-18 14:00:34 | 显示全部楼层    本楼为最佳答案   
本帖最后由 风过无痕1989 于 2021-1-18 15:05 编辑
monkey__ 发表于 2021-1-18 13:51
谢谢您的指正,这个好像是没用代码框的问题~


修改后,运行就正常了。但你要输入的字符串:Hold on your hats. Ladies and gentlemen. 的长度,你自己可以数一数,超过21个字符

你最后一行输出 index = 10,是因为程序的第 15 行的条件:&& i <= 21

故你的程序要完全正确地运行,还得修改两处:第 7 行修改为 char str[50],第 15 行修改为 if(c == ' ' && i <= 40 )
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-18 22:37:55 | 显示全部楼层
风过无痕1989 发表于 2021-1-18 14:00
修改后,运行就正常了。但你要输入的字符串:Hold on your hats. Ladies and gentlemen. 的长度,你自 ...

不好意思,还是没有太明白,为什么我打印的每次index的值已经到18了会突然跳回到10这里,就是10这个值我想不到会从哪里赋过来,主要是这里有疑惑。再次感谢您。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-18 22:58:34 | 显示全部楼层
好像你的数组越界了吧,才有个随机值,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-18 22:59:32 | 显示全部楼层
DongGu.. 发表于 2021-1-18 22:58
好像你的数组越界了吧,才有个随机值,

目前看貌似是的,但是这个每次都是10让我很疑惑 = =
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-18 23:01:38 | 显示全部楼层
风过无痕1989 发表于 2021-1-18 14:00
修改后,运行就正常了。但你要输入的字符串:Hold on your hats. Ladies and gentlemen. 的长度,你自 ...

我又去试了下您给的指正,修正后index确实没有再突然跳回10的问题了,参考您的指正再review下代码,可能是输入的长度太长了超过了定义的数组边界导致?之前定义的长度是21,给输入了29,是这样吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-19 00:23:10 | 显示全部楼层
monkey__ 发表于 2021-1-18 23:01
我又去试了下您给的指正,修正后index确实没有再突然跳回10的问题了,参考您的指正再review下代码,可能 ...

由于你设置的是 i <=21,所以,大于第 21个字符,便得不到输出 index;

说实话,你这个程序还有两个不是问题的问题(就是它们对程序的运行没有影响),我就没有修改了。这两个问题是:所定义的的 len 没有使用;所定义的 index 其实也是没有必要的,直接用变量 i 输出就可以了。

由于你没有将最终的循环变量 i 的值赋给 index,即没我程序中的第 22 行,最后输出的 index = 10 其实是一个错误,这一点,你使用调试功能一步一步地执行就能看得清清楚楚了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-1-19 10:02:10 | 显示全部楼层

了解了,万分感谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 07:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表