
C语言问题。小弟菜鸟哈,才学C5天,发现一个很奇怪的现象,请大家解释下哈,谢谢了
输入一个字符串,然后显示出其中空格,字母,数字,其他符号的数量。这是代码#include<stdio.h>intmain(){charc;intletters=0,spa...
输入一个字符串,然后显示出其中空格,字母,数字,其他符号的数量。这是代码
#include <stdio.h>
int main()
{
char c;
int letters=0,space=0,digit=0,others=0;
printf("please input some characters\n");
while((c=getchar())!='\n')
{
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
letters++;
else if(c==' ')
space++;
else if(c>='0'&&c<='9')
digit++;
else
others++;
}
printf("all in all:char=%d space=%d digit=%d others=%d\n",letters, space,digit,others);
return 0;
}
我很惊奇的发现如果space letter 这几个变量如果不初始化,运行的值就会达到编译器的阈值,我不知道为什么,我记得整型变量的默认值是0对吧,小弟新手,分都没了,还望大家帮帮忙啊,非常感谢啊 展开
#include <stdio.h>
int main()
{
char c;
int letters=0,space=0,digit=0,others=0;
printf("please input some characters\n");
while((c=getchar())!='\n')
{
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
letters++;
else if(c==' ')
space++;
else if(c>='0'&&c<='9')
digit++;
else
others++;
}
printf("all in all:char=%d space=%d digit=%d others=%d\n",letters, space,digit,others);
return 0;
}
我很惊奇的发现如果space letter 这几个变量如果不初始化,运行的值就会达到编译器的阈值,我不知道为什么,我记得整型变量的默认值是0对吧,小弟新手,分都没了,还望大家帮帮忙啊,非常感谢啊 展开
6个回答
展开全部
编译器不一定对自动变量初始化,大多数编译器不对自动变量初始化。
在函数内部,没有指定类型的变量是默认的自动变量,存储类型为“auto“。从编译之后的汇编代码可以看到,分配自动变量的内存时只是简单地修改栈指针的值。也就是说,几乎所有的编译器都不初始化自动变量。
只有静态变量和全局变量才会被初始化为0
在函数内部,没有指定类型的变量是默认的自动变量,存储类型为“auto“。从编译之后的汇编代码可以看到,分配自动变量的内存时只是简单地修改栈指针的值。也就是说,几乎所有的编译器都不初始化自动变量。
只有静态变量和全局变量才会被初始化为0
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个和编译器 也是有关系的。
如果你用VC++调试运行程序的话侧不会有错 其默认变量值为0。
TC调试运行 则会 出现意想不到的结果 变量先定义后赋值再使用 否则变量的值是不可预测的。
好的编程风格应做到 变量先定义赋完初值后在使用。
如果你用VC++调试运行程序的话侧不会有错 其默认变量值为0。
TC调试运行 则会 出现意想不到的结果 变量先定义后赋值再使用 否则变量的值是不可预测的。
好的编程风格应做到 变量先定义赋完初值后在使用。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
嘿嘿;同学你还真幽默,C语言中只有全局变量系统才会对其初始化;而你代码中的变量全是局部变量,如果你不对其初始化,则他们就是随机值,,,,,所以不初始化就会有问题...........
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个不同的编译器处理方式不同。
你可以这样理解:
x*=x++;
x+=x;
得:x++ // 4->x
x*=x // 4*3->x(12)
x+=x // 12+4->x(16)
你可以这样理解:
x*=x++;
x+=x;
得:x++ // 4->x
x*=x // 4*3->x(12)
x+=x // 12+4->x(16)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
呵呵 我理解你意思了 他们已经初始化了 int letters=0,space=0,digit=0,others=0;
这个等价于 int letters=0; int space=0; int digit=0, 等等
这个等价于 int letters=0; int space=0; int digit=0, 等等
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询