程序运行不正常-C

程序运行不正常-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");

下面的代码始终为“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");
    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++;