开关默认值不显示
Switch default is not showing when it should
在我使用 switch 的 C 程序中,我的 int 变量有问题。
我的代码是:
while(1) {
printf("0. END\n1. TRANSLATE\n2. TEST FROM LESSON\n3. RANDOM"
" WORDS TEST\n4. SHOW DICTIONARY\n5. ADD WORD\n"
"6. DELETE WORD\nYOUR CHOICE: ");
scanf("%d",&option);
fflush(stdin);
printf("\n");
switch(option) {
case 0: {
exit(0);
break;
}
case 1: {
system("cls");
translate();
printf("\n");
break;
}
case 2: {
system("cls");
lessons();
printf("\n");
break;
}
case 3: {
randomFromLessons();
printf("\n");
break;
}
case 4: {
system("cls");
allWords();
printf("\n");
break;
}
case 5: {
system("cls");
addWord();
break;
}
case 6: {
system("cls");
deleteWord();
printf("\n");
break;
}
default: {
printf("---------------\n");
printf("WRONG VALUE.\n");
printf("---------------\n\n");
}
}
}
当我在选项 var 中输入 'd' 时。它显示默认值,这是我想要的,但是当我按数字 1 启动名为“translate()”的方法然后返回主菜单并再次按 'd' 它让我回到“translate()”而不是显示默认值。
当我使用 char 而不是 int 时,没有问题。
那么,到底是什么问题呢?什么一直在发生?我究竟做错了什么?那么在 switch 中使用 char 不是最好的选择吗?
如果您希望允许文本输入,您应该使用 fgets
将输入读取为字符串,然后根据需要转换为整数。
如果你只想接受数字,你应该检查 scanf
的结果看它是否成功 - 在这种情况下它会 return 1
当成功时,以防万一它设法读取了 1 个参数。如果不成功,它不会覆盖 option
但会保留以前的值 - 这就是为什么你会得到你描述的行为。
此外,fflush(stdin);
是未定义的行为,因为 fflush
从未打算用于输入流。要从标准输入中丢弃换行符,您可以添加单个 getchar()
.
所以你可以将代码修改成这样:
int result;
while(1)
{
result = scanf("%d",&option);
getchar();
if(result == 1)
break;
else
printf("some error message\n");
}
switch(option)
...
在我使用 switch 的 C 程序中,我的 int 变量有问题。 我的代码是:
while(1) {
printf("0. END\n1. TRANSLATE\n2. TEST FROM LESSON\n3. RANDOM"
" WORDS TEST\n4. SHOW DICTIONARY\n5. ADD WORD\n"
"6. DELETE WORD\nYOUR CHOICE: ");
scanf("%d",&option);
fflush(stdin);
printf("\n");
switch(option) {
case 0: {
exit(0);
break;
}
case 1: {
system("cls");
translate();
printf("\n");
break;
}
case 2: {
system("cls");
lessons();
printf("\n");
break;
}
case 3: {
randomFromLessons();
printf("\n");
break;
}
case 4: {
system("cls");
allWords();
printf("\n");
break;
}
case 5: {
system("cls");
addWord();
break;
}
case 6: {
system("cls");
deleteWord();
printf("\n");
break;
}
default: {
printf("---------------\n");
printf("WRONG VALUE.\n");
printf("---------------\n\n");
}
}
}
当我在选项 var 中输入 'd' 时。它显示默认值,这是我想要的,但是当我按数字 1 启动名为“translate()”的方法然后返回主菜单并再次按 'd' 它让我回到“translate()”而不是显示默认值。
当我使用 char 而不是 int 时,没有问题。 那么,到底是什么问题呢?什么一直在发生?我究竟做错了什么?那么在 switch 中使用 char 不是最好的选择吗?
如果您希望允许文本输入,您应该使用 fgets
将输入读取为字符串,然后根据需要转换为整数。
如果你只想接受数字,你应该检查 scanf
的结果看它是否成功 - 在这种情况下它会 return 1
当成功时,以防万一它设法读取了 1 个参数。如果不成功,它不会覆盖 option
但会保留以前的值 - 这就是为什么你会得到你描述的行为。
此外,fflush(stdin);
是未定义的行为,因为 fflush
从未打算用于输入流。要从标准输入中丢弃换行符,您可以添加单个 getchar()
.
所以你可以将代码修改成这样:
int result;
while(1)
{
result = scanf("%d",&option);
getchar();
if(result == 1)
break;
else
printf("some error message\n");
}
switch(option)
...