主题:数组问题
世界末日
[专家分:0] 发布于 2011-07-20 20:33:00
#include<iostream>
#include<conio.h>
using namespace std;
int main()
{
char a[]="abcdabcabdaeff";
int b[5]={0},i=0;
while(a[i++])
{
switch(a[i])
{
case'a':b[0]++;break;
case'b':b[1]++;break;
case'c':b[2]++;break;
case'd':b[3]++;break;
dafault:b[4]++;
}
}
for(i=0;i<5;i++) cout<<b[i]<<' ';
cout<<endl;
}
我算出来是33223,可答案是33220,另外,我在Dev-C++ 5中编译通过,可什么都没有输出,这是怎么回事?
回复列表 (共6个回复)
沙发
cgl_lgs [专家分:21040] 发布于 2011-07-21 11:05:00
int b[5]={0}
这样初始化是不对的,它只能初始化第一个元素。。。
板凳
nightco [专家分:0] 发布于 2011-07-21 18:10:00
[quote]int b[5]={0}
这样初始化是不对的,它只能初始化第一个元素。。。[/quote]
他意思是把所有元素初始为0. 这样初始化完全可以,因为它在mian函数里面,后面的会自动补0,就算只写int b[5]; 这样也可以
3 楼
寻路的人 [专家分:90] 发布于 2011-07-22 08:45:00
1、char a[]="abcdabcabdaeff";
应该是:4(a) 3(b) 2(c) 2(d) 3(e+f)
2、while循环应改改:
[color=FF0000]while(a[i])[/color]{
switch(a[i])
{
case'a':b[0]++;break;
case'b':b[1]++;break;
case'c':b[2]++;break;
case'd':b[3]++;break;
dafault:b[4]++;
}
[color=FF0000]i++;[/color]
}
3、dafault:b[4]++; //错了,是 [color=FF0000]default[/color]
4 楼
windy0will [专家分:2300] 发布于 2011-07-22 09:25:00
可能楼主要问的是 为什么原代码(可能是某种考试的题目)的结果是 33220。
原因就如 楼上指出的那样,有两点:
1. [code=c]
while(a[i++])
{
switch(a[i])[/code]
2. [code=c]
dafault:b[4]++;
[/code]
上面的第2点,用gcc编译成汇编代码,发现给出警告
标签 'dafault' 定义了但没有使用
也就是说,根本不可能执行到这一条语句,因此b[4]等于0
上面的第1点,使得程序跳过了第一个字符'a',因此b[0]等于4-1
5 楼
cgl_lgs [专家分:21040] 发布于 2011-07-23 16:09:00
[quote][quote]int b[5]={0}
这样初始化是不对的,它只能初始化第一个元素。。。[/quote]
他意思是把所有元素初始为0. 这样初始化完全可以,因为它在mian函数里面,后面的会自动补0,就算只写int b[5]; 这样也可以[/quote]
static变量是可以初始化的。而局部变量是在栈中,它不会绝对性的恒为0(初始值)如果你说书本上告诉你的,我只能说:书上说的不对。
6 楼
Hack_RDZ [专家分:0] 发布于 2011-07-29 18:12:00
int main()涵数加上return 0;
dafault-->default;
另外,正确输出为3 3 2 2 4
我来回复