请问我的switch语句哪里出了问题啊
把其中一个case块注释掉又可以运行。。。#include <stdio.h>
int main(void)
{
char dh;
printf("请输入要执行的语句块代号:");
scanf("%c", &dh);
switch (dh)
{
case 'a' :
int i = 1, sum = 0;
while (i <= 100)
{
sum = sum + i;
i = i + 1;
}
printf("结果是:%d\n", sum);
break;
case 'b' ://
int count = 0;
printf("请输入一个英文句子:");
while (getchar() != '\n')
{
count = count + 1;
}
printf("你总共输入了%d个字符!\n", count);
break;
}
return 0;
} #define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
char dh;
printf("请输入要执行的语句块代号:");
scanf("%c", &dh);
int i = 1, sum = 0; //放外面
switch (dh)
{
case 'a':
while (i <= 100)
{
sum = sum + i;
i = i + 1;
}
printf("结果是:%d\n", sum);
break;
case 'b'://
int count = 0;
printf("请输入一个英文句子:");
while (getchar() != '\n')
{
count = count + 1;
}
printf("你总共输入了%d个字符!\n", count);
break;
}
return 0;
}
你的i和sum变量的定义过程被switch case语句跳过了,放在外面就好了 #define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
char dh;
printf("请输入要执行的语句块代号:");
scanf("%c", &dh);
int i = 1, sum = 0; //这里放外面哦
switch (dh)
{
case 'a':
while (i <= 100)
{
sum = sum + i;
i = i + 1;
}
printf("结果是:%d\n", sum);
break;
case 'b': //你这里少了一层输入啊,已补上
char input;
int count = 0;
printf("请输入一个英文句子:");
scanf("%c", &input);
while (getchar() != '\n')
{
count = count + 1;
}
printf("你总共输入了%d个字符!\n", count);
break;
}
return 0;
}
这样应该没问题了,解决了记得给的最佳 #include <stdio.h>
int main(void)
{
char dh;
printf("请输入要执行的语句块代号:");
scanf("%c", &dh);
getchar();//过滤回车
int i = 1, sum = 0, count=0;
switch (dh)
{
case 'a' :
while (i <= 100)
{
sum = sum + i;
i = i + 1;
}
printf("结果是:%d\n", sum);
break;
case 'b' ://
printf("请输入一个英文句子:");
while (getchar() != '\n')
{
count = count + 1;
}
printf("你总共输入了%d个字符!\n", count);
break;
}
return 0;
} 薛非
薛非
《品悟C》作者
5 人赞同了该回答
这是C++代码,不是C代码。
在C语言中这是错误的写法。
因为C语言中labeled-statement的构成规则是
case constant-expression : statement
注意,“:”后面跟的必须是statement
但是int ival;并不是statement,而是一个declaration
在C语言中declaration不是statement,所以代码根本不能这样写。
在C++中则有一种declaration-statement,也许代码可以这样写。但具体的语义我不是很清楚。
题外话:
1.你怎么看一个程序员分不清C和C++? 这种程序员是半吊子程序员,既不真正懂C,也不真正懂C++。
2.《C Primer Plus》一书中把声明说成语句是严重的概念错误,这是我讲这本书的某些概念不准确的原因。
知乎https://www.zhihu.com/question/23051685
页:
[1]