开关和默认值:对于C
对不起,如果这听起来像是一个非常基本的问题,这是我第一次在这里 我在为C编写代码时遇到了一些困难,特别是在使用开关和该开关的默认值时。下面是一些示例代码:开关和默认值:对于C,c,switch-statement,default-value,C,Switch Statement,Default Value,对不起,如果这听起来像是一个非常基本的问题,这是我第一次在这里 我在为C编写代码时遇到了一些困难,特别是在使用开关和该开关的默认值时。下面是一些示例代码: #include<stdio.h> int key; main() { while((key=getchar())!=EOF) { printf("you pressed %c \n",key); switch(key){ case'0': case'1': case'2': case'3': printf("it
#include<stdio.h>
int key;
main()
{
while((key=getchar())!=EOF)
{
printf("you pressed %c \n",key);
switch(key){
case'0':
case'1':
case'2':
case'3':
printf("it's a numeral\n");
break;
default:
printf("it's not a numeral\n");
}
}
}
#包括
int键;
main()
{
while((key=getchar())!=EOF)
{
printf(“您按了%c\n”,键);
开关(钥匙){
案例'0':
案例'1':
案例'2':
案例'3':
printf(“它是一个数字”);
打破
违约:
printf(“它不是数字”);
}
}
}
实际代码要长一些,这纯粹是一个示例
所以代码编译它,我执行它,但我得到:
“你按了1,它是数字,你按了,它不是数字。”
我的代码似乎“失败”了,并且在没有引用任何一个的情况下重复它自己。如果有人能帮忙,那就太好了,因为这是一本教科书中的一个例子,我完全被卡住了
最亲切的问候。你需要吃换行符,当你点击
return
时,它会被放入读取缓冲区
在切换之后或之前再次调用
getchar
以解决问题。您需要使用换行符,当您点击return
时,该换行符会被放入读取缓冲区
在切换之后或之前再次调用
getchar
以解决您的问题。这里有一个想法…在printf()之前插入忽略空格和所有控制字符的逻辑
if(key <= ' ')
continue;
printf(...) ...
如果(键这里有一个想法…就在printf()之前插入逻辑忽略空格和所有控制字符
if(key <= ' ')
continue;
printf(...) ...
if(key我不知道这是否是问题所在,但您有三个案例没有中断。因此,您按“1”键,程序无需执行,因此ins转到下一个案例如何正确,这是默认情况。
虽然在int变量中使用字符
在您的示例中,采用如下if子句是更好的方法:
#include<stdio.h>
char key;
main()
{
while((key=getchar())!=EOF)
{
printf("you pressed %c \n",key);
if(key == '0' || key == '1' || key == '2' || key == '3'){
printf("it's a numeral\n");
}
else {
printf("it's not a numeral\n");
}
}
#包括
字符键;
main()
{
while((key=getchar())!=EOF)
{
printf(“您按了%c\n”,键);
如果(键='0'| |键=='1'| |键=='2'| |键=='3'){
printf(“它是一个数字”);
}
否则{
printf(“它不是数字”);
}
}
代码未经测试。;-)
在大型程序中,最好的方法是使用正则表达式
我希望,这个答案是有帮助的。我不知道这是否是问题所在,但您有三个案例没有中断。因此,您按“1”键,程序无需执行,因此ins转到下一个案例如何正确,这是默认情况。
虽然在int变量中使用字符
在您的示例中,采用如下if子句是更好的方法:
#include<stdio.h>
char key;
main()
{
while((key=getchar())!=EOF)
{
printf("you pressed %c \n",key);
if(key == '0' || key == '1' || key == '2' || key == '3'){
printf("it's a numeral\n");
}
else {
printf("it's not a numeral\n");
}
}
#包括
字符键;
main()
{
while((key=getchar())!=EOF)
{
printf(“您按了%c\n”,键);
如果(键='0'| |键=='1'| |键=='2'| |键=='3'){
printf(“它是一个数字”);
}
否则{
printf(“它不是数字”);
}
}
代码未经测试。;-)
在大型程序中,最好的方法是使用正则表达式
我希望,这个答案是有帮助的。您需要说明输入Enter键的原因,它会在*nix系统上生成“\n”。我不确定在Windows系统上按Enter键的作用
这是修改后的原始代码,可以使用返回键
#include<stdio.h>
int key = 0;
main()
{
while((key=getchar())!=EOF)
{
if('\n' == key)
{
/* Be silent on linefeeds */
continue;
}
printf("you pressed %c \n",key);
switch(key){
case'0':
case'1':
case'2':
case'3':
printf("it's a numeral\n");
break;
default:
printf("it's not a numeral\n");
}
}
}
#包括
int键=0;
main()
{
while((key=getchar())!=EOF)
{
如果('\n'==键)
{
/*对换行保持沉默*/
持续
}
printf(“您按了%c\n”,键);
开关(钥匙){
案例'0':
案例'1':
案例'2':
案例'3':
printf(“它是一个数字”);
打破
违约:
printf(“它不是数字”);
}
}
}
您可以使用getchar()
有一个特定的原因,但我在C语言中的经验通常涉及到读取整行,而像scanf
这样的RTL函数将为您吃掉行终止符。您需要考虑输入Enter键,这会在*nix系统上生成“\n”。我不确定在Windows系统上按Enter键做什么
这是修改后的原始代码,可以使用返回键
#include<stdio.h>
int key = 0;
main()
{
while((key=getchar())!=EOF)
{
if('\n' == key)
{
/* Be silent on linefeeds */
continue;
}
printf("you pressed %c \n",key);
switch(key){
case'0':
case'1':
case'2':
case'3':
printf("it's a numeral\n");
break;
default:
printf("it's not a numeral\n");
}
}
}
#包括
int键=0;
main()
{
while((key=getchar())!=EOF)
{
如果('\n'==键)
{
/*对换行保持沉默*/
持续
}
printf(“您按了%c\n”,键);
开关(钥匙){
案例'0':
案例'1':
案例'2':
案例'3':
printf(“它是一个数字”);
打破
违约:
printf(“它不是数字”);
}
}
}
您可能出于特定的原因使用了getchar()
,但我在C语言中的经验通常涉及到读取整行代码,而像scanf
这样的RTL函数将为您吃掉行终止符。
- 问题可能是由于输入缓冲区未刷新。当在开关情况下匹配“1”时,缓冲区中仍保留一个换行符
- 试试这个,
fflush(stdin)
fflush(标准输入法)
- 问题可能是由于输入缓冲区未刷新。当在开关情况下匹配“1”时,缓冲区中仍保留一个换行符
- 试试这个,
fflush(stdin)
fflush(标准输入法)
你没有吃
return
键。可能重复的你没有吃return
键。此代码行为的可能重复与OP相同;以什么方式更好?@ScottHunter:相反,我在这个答案中看到了许多问题。对于一个简单的通用处理,多个空的情况比t对膨胀的if条件进行编码,这是使用开关的方法。关于正则表达式的一般无条件使用的建议是金锤综合征的一个症状。该代码的行为与OP相同;以什么方式更好?@ScottHunter:相反,我在这方面看到了许多问题