monkey__ 发表于 2021-1-17 21:31:31

c语言求助

本帖最后由 monkey__ 于 2021-1-18 13:53 编辑

#include <stdio.h>
#include <string.h>

int main(){

      int i=0,index=-1,len=0;
      char str;
      char c;

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

      do{
                c=getchar();
                str=c;
                if(c==' ' && i<=21 ){
                        index=i;
                        printf("index is %d\n",index);
                }
                i++;
      }while(c!='\n');

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

      str='\0';

      return 0;
}



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

# 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-17 22:20:41

VS2015运行无此问题D:\FishC\yuanc.PNG

monkey__ 发表于 2021-1-18 09:51:36

战机智 发表于 2021-1-17 22:20
VS2015运行无此问题

好吧 = - 我这一脸懵逼

风过无痕1989 发表于 2021-1-18 12:53:53

本帖最后由 风过无痕1989 于 2021-1-18 15:32 编辑

#include <stdio.h>
#include <string.h>

int main() {

        int i = 0, index = -1, len = 0;
        char str;
        char c;

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

        do {
                c = getchar();
                str = c;            // 错误!str 是字符数组名,不能其赋值,需改为:str
                if (c == ' ' && i <= 50) {
                        index = i;
                        printf("index is %d\n", index);
                }
                i++;
        } while (c != '\n');

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

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

        return 0;
}

monkey__ 发表于 2021-1-18 13:51:48

风过无痕1989 发表于 2021-1-18 12:53


谢谢您的指正,这个好像是没用代码框的问题~

风过无痕1989 发表于 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,第 15 行修改为 if(c == ' ' && i <= 40 )

monkey__ 发表于 2021-1-18 22:37:55

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

不好意思,还是没有太明白,为什么我打印的每次index的值已经到18了会突然跳回到10这里,就是10这个值我想不到会从哪里赋过来,主要是这里有疑惑。再次感谢您。

DongGu.. 发表于 2021-1-18 22:58:34

好像你的数组越界了吧,才有个随机值,

monkey__ 发表于 2021-1-18 22:59:32

DongGu.. 发表于 2021-1-18 22:58
好像你的数组越界了吧,才有个随机值,

目前看貌似是的,但是这个每次都是10让我很疑惑 = =

monkey__ 发表于 2021-1-18 23:01:38

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

我又去试了下您给的指正,修正后index确实没有再突然跳回10的问题了,参考您的指正再review下代码,可能是输入的长度太长了超过了定义的数组边界导致?之前定义的长度是21,给输入了29,是这样吗?

风过无痕1989 发表于 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 其实是一个错误,这一点,你使用调试功能一步一步地执行就能看得清清楚楚了

monkey__ 发表于 2021-1-19 10:02:10

风过无痕1989 发表于 2021-1-19 00:23
由于你设置的是 i

了解了,万分感谢~
页: [1]
查看完整版本: c语言求助