程序运行不正常-C
下面的代码始终为“count”提供零值程序运行不正常-C,c,compiler-errors,C,Compiler Errors,下面的代码始终为“count”提供零值 #include <stdio.h> #include <stdlib.h> #include <string.h> #define SIZE 128 int main () { char mychar , string [SIZE]; int i; int count =0 ; printf ("Please enter your string: \n\n");
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 128
int main ()
{
char mychar , string [SIZE];
int i;
int count =0 ;
printf ("Please enter your string: \n\n");
fgets (string, SIZE, stdin);
printf ("Please enter char to find: ");
mychar = getchar();
for (i=0 ; (string[i] == '\0') ; i++ )
if ( string[i] == mychar )
count++;
printf ("The char %c appears %d times" ,mychar ,count);
return 0;
}
#包括
#包括
#包括
#定义大小128
int main()
{
char mychar,字符串[大小];
int i;
整数计数=0;
printf(“请输入您的字符串:\n\n”);
fgets(字符串、大小、标准输入);
printf(“请输入char以查找:”;
mychar=getchar();
对于(i=0;(字符串[i]='\0');i++)
if(字符串[i]==mychar)
计数++;
printf(“字符%c出现了%d次”,mychar,count);
返回0;
}
谢谢 这个
int const count =0 ;
还有这个
count++;
冲突,常量变量的值不能更改(这就是为什么它被称为常量)替换
int const count = 0;
与
您正在尝试更改声明的const
变量(count++
),显然,这是不允许的
编辑:更新问题的答案是,您应该将循环条件从
string[i]='\0'
更改为string[i]!='\0'
。这是因为循环在条件为真时运行<代码>字符串[i]!='\0'适用于除终止的空字节以外的整个字符串,而字符串[i]='\0'
则相反。因此,原始循环没有运行一次。无法更改常量,因此int const count=0代码>不能被const++修改
,要解决此问题,只需删除const
关键字:
int count = 0;
将==
替换为=代码>在字符串[i]='\0'
for (i=0 ; (string[i] == '\0') ; i++ )
if ( string[i] == mychar )
count++;
这意味着只要string[i]='\0'
,就可以运行循环,但是string[i]
也不能是mychar
(除非mychar
是\0
),因此您永远不会增加计数
我想你的意思是:
for (i = 0; string[i] != '\0'; i++)
if (string[i] == mychar)
count++;
更直截了当地说,他的意思是,从int声明中删除const
cycle@AdamD:我想您应该将循环条件从string[I]='\0'
更改为string[I]!='\0'
@Adam D:循环将一直运行,直到条件变为false<代码>字符串[i]!='\0'
在到达字符串结尾时变为false,而字符串[i]='\0'
在字符串结尾之前的任何字符处变为false。因此,您原来的循环一次也没有运行。@Adam如果您不知道==
和之间的区别,我可以谦恭地请求您=代码>,即在更好地掌握C之前,停止回答有关C的问题。我注意到你对C类问题的回答几乎都是错误的。我会全部否决,但我不想浪费我的名誉点数。我想更清楚地说,循环是在条件为真的情况下运行的。当你改变一个问题时,如果不留下任何原始的痕迹,就很难正确回答一个问题。您的第一个问题和第二个问题根本没有关系。@Erik他确实不应该更改问题或代码,但代码中唯一的区别是是否存在const
。两种情况下的基本问题是相同的;吉姆·鲍尔特:这样做的问题是,被接受的答案现在回答了他原来的问题——与问题文本不匹配。如果你后来偶然发现这个问题,需要一些阅读才能弄清楚问题、接受的答案和评论之间的关系。@Erik我当然很清楚这一点,但这并不相关——原始代码有两个bug,更改后的代码修复了一个bug,而另一个bug没有修复;那可不像“没有关系”。我的观点是,找到代码中的bug并不难,一个好的SO响应可以解决所有问题,而不仅仅是OP识别的问题——OP通常是一个诊断技能差的新手。(如果你想争论,我就不必回答了。)@Erik“这样做的问题”——当我已经说过他不应该改变它时,你不必告诉我这样做的问题——我这么说是因为我当然很清楚这样做的问题。嘘,什么样的白痴否决了这个正确答案,为什么?这是第一个正确的答案,而被接受的“答案”甚至不包含答案。。。这是作为评论添加的!所以有时候你会很失望。
for (i = 0; string[i] != '\0'; i++)
if (string[i] == mychar)
count++;