C 变量值递增不正确

C 变量值递增不正确,c,C,我有以下代码: #include <stdio.h> #include <ctype.h> int main(int argc, char **argv) { int ch, lower, upper = 0; printf("Enter a line of text: \n"); while ((ch = getchar()) != EOF) { if (islower(ch)) {

我有以下代码:

#include <stdio.h>
#include <ctype.h>

int main(int argc, char **argv)
{
        int ch, lower, upper = 0;
        printf("Enter a line of text: \n");
        while ((ch = getchar()) != EOF) {
        if (islower(ch)) {
                ch = toupper(ch);
                ++upper;
        } else if (isupper(ch)) {
                ch = tolower(ch);

                printf("Looking at lower: %d\n", lower);
                ++lower;
                printf("Looking at lower: %d\n", lower);
        }
        putchar(ch);
        }
        printf("Hello\n");
        printf("\nRead %d characters in total. %d converted to upper-case, %d to lower-case.", upper+lower, upper, lower);
}
#包括
#包括
int main(int argc,字符**argv)
{
int ch,下,上=0;
printf(“输入一行文本:\n”);
而((ch=getchar())!=EOF){
if(岛下(ch)){
ch=toupper(ch);
++上部;
}否则如果(isupper(ch)){
ch=托洛尔(ch);
printf(“查看下方:%d\n”,下方);
++较低;
printf(“查看下方:%d\n”,下方);
}
putchar(ch);
}
printf(“Hello\n”);
printf(“\n总共读取%d个字符。%d个转换为大写,%d个转换为小写。”,大写+小写,大写,小写);
}
由于某些原因,上限变量设置正确,但无法找出下限变量给出错误值的原因。例如,如果我输入“Football”,则表示4195825已转换为小写,其中实际输出应为1


我看不出哪里出了问题。

您还没有初始化
lower
。它的价值是不确定的

C11:6.7.9初始化(第10页): 如果没有显式初始化具有自动存储持续时间的对象,则其值为 不确定

将其初始化为
0

int ch, lower = 0, upper = 0;  

您尚未初始化
lower
。它的价值是不确定的

C11:6.7.9初始化(第10页): 如果没有显式初始化具有自动存储持续时间的对象,则其值为 不确定

将其初始化为
0

int ch, lower = 0, upper = 0;  

我认为这不是问题所在。如果我做int ch,下,上;它给出相同的输出。是的,这就是问题所在。我引用了这个标准。哦,对不起,是的,你是对的,但是如果我使用int-ch,lower,upper,为什么上限变量可以正确工作;但是较低的变量不会?间接地,您的程序调用未定义的行为。您可能会得到预期的或意外的输出。没什么可说的。很有趣。。有什么地方可以让我读到更多关于这种随机行为的信息吗?我认为这不是问题所在。如果我做int ch,下,上;它给出相同的输出。是的,这就是问题所在。我引用了这个标准。哦,对不起,是的,你是对的,但是如果我使用int-ch,lower,upper,为什么上限变量可以正确工作;但是较低的变量不会?间接地,您的程序调用未定义的行为。您可能会得到预期的或意外的输出。没什么可说的。很有趣。。有什么地方可以让我读到更多关于这种随机行为的信息吗?