gpt4 book ai didi

c - C 程序的奇怪行为

转载 作者:太空宇宙 更新时间:2023-11-04 04:54:35 24 4
gpt4 key购买 nike

以下是我的 C 代码。

#include<stdio.h>
#include<stdlib.h>

int main()
{
int ch;

do
{
printf("\n1.create\n2.display\n3.exit\n\t");
printf("Enter your choice:: ");
scanf("%d",&ch);
printf("choice = %d\n\n", ch);
if(ch==32767)
return 0;
switch(ch)
{
case 1:
printf("\n Case 1 executed\n");
break;
case 2:
printf("\nCase 2 executed\n");
break;
case 3:
printf("\nExit\n");
exit(0);
break;
default:
printf("Wrong choice!!!");
break;

}
}while(ch!=3);
return 0;
}

问题是,当我为 ch 输入整数值时,它工作正常。但是当我输入任何字符时,它正在无限循环中运行。

谁能解决吗

最佳答案

如果您希望能够处理字符,您应该使用 char 值而不是 int

在那种情况下,您还必须修改您的 switch-case 语句,因为 '1' - 一个字符,不同于 1 - 整数。更正后的代码应该是这样的:

#include <limits.h>

int main()
{
char ch;

do
{
printf("\n1.create\n2.display\n3.exit\n\t");
printf("Enter your choice:: ");
scanf("%c",&ch);
printf("choice = %c\n\n", ch);
switch(ch)
{
case '1':
printf("\n Case 1 executed\n");
break;
case '2':
printf("\nCase 2 executed\n");
break;
// case 32767: - can not be stored in a char variable
case 127:
case CHAR_MAX: // these two are almost equivalent, but the
// second one is better because it relies on
// library defined constant from limits.h
case '3':
printf("\nExit\n");
exit(0);
break;
case 'a':
printf("\nA character case accepted!\n");
break;
default:
printf("Wrong choice!!!");
break;

}
}while();
return 0;
}

请注意,我还从 while() 参数中排除了中断条件,因为它是多余的 - 它已经在 switch 语句中进行了检查。

我还添加了一个解析字符的非错误案例,以便您可以看到它的示例。

另一个注意事项:您的旧代码应该接受 011 作为有效选择,而新代码会将 01 解析为两个不同的选择(1 个选择 == 1 个字符):

  • 0 将被解析为错误的选择
  • 1 将被解析为案例 1 的正确选择

我还在更正的代码片段中的代码注释中对您的代码中的其他一些内容进行了注释。我取出了“不可能的”if(正如 Jerry Coffin 在评论中指出的那样),并将其放在更合适的位置,将常量替换为有意义的内容。

关于c - C 程序的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10535702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com