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) VS2015运行无此问题D:\FishC\yuanc.PNG 战机智 发表于 2021-1-17 22:20
VS2015运行无此问题
好吧 = - 我这一脸懵逼 本帖最后由 风过无痕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;
} 风过无痕1989 发表于 2021-1-18 12:53
谢谢您的指正,这个好像是没用代码框的问题~ 本帖最后由 风过无痕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 ) 风过无痕1989 发表于 2021-1-18 14:00
修改后,运行就正常了。但你要输入的字符串:Hold on your hats. Ladies and gentlemen. 的长度,你自 ...
不好意思,还是没有太明白,为什么我打印的每次index的值已经到18了会突然跳回到10这里,就是10这个值我想不到会从哪里赋过来,主要是这里有疑惑。再次感谢您。 好像你的数组越界了吧,才有个随机值, DongGu.. 发表于 2021-1-18 22:58
好像你的数组越界了吧,才有个随机值,
目前看貌似是的,但是这个每次都是10让我很疑惑 = = 风过无痕1989 发表于 2021-1-18 14:00
修改后,运行就正常了。但你要输入的字符串:Hold on your hats. Ladies and gentlemen. 的长度,你自 ...
我又去试了下您给的指正,修正后index确实没有再突然跳回10的问题了,参考您的指正再review下代码,可能是输入的长度太长了超过了定义的数组边界导致?之前定义的长度是21,给输入了29,是这样吗? monkey__ 发表于 2021-1-18 23:01
我又去试了下您给的指正,修正后index确实没有再突然跳回10的问题了,参考您的指正再review下代码,可能 ...
由于你设置的是 i <=21,所以,大于第 21个字符,便得不到输出 index;
说实话,你这个程序还有两个不是问题的问题(就是它们对程序的运行没有影响),我就没有修改了。这两个问题是:所定义的的 len 没有使用;所定义的 index 其实也是没有必要的,直接用变量 i 输出就可以了。
由于你没有将最终的循环变量 i 的值赋给 index,即没我程序中的第 22 行,最后输出的 index = 10 其实是一个错误,这一点,你使用调试功能一步一步地执行就能看得清清楚楚了 风过无痕1989 发表于 2021-1-19 00:23
由于你设置的是 i
了解了,万分感谢~
页:
[1]