1

以下是我的 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 输入整数值时,它工作正常。但是当我输入任何字符时,它正在无限循环中运行。

任何人都可以解决它。

4

2 回答 2

2

如果您希望能够处理字符,则应该使用charvalue 而不是 an 。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 在评论中指出的那样),并将其放在更合适的位置,将常量替换为有意义的东西。

于 2012-05-10T14:08:43.187 回答
-3

利用scanf ("%*[^\n]\n");

在这里,您使用了scanf("%d",&ch); 它将正确读取整数值,但是一旦您给出除整数以外的任何值,它将终止或显示不同的输出。 Why this is happening ? @这是发生的,因为每次您输入一些有效或无效的值时,它都会在从那里读取的值之后放置在输入缓冲区读取器中。

有关 scanf 的更多信息:http ://en.wikipedia.org/wiki/Scanf_format_string

#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 ("%*[^\n]\n");
        scanf("%d",&ch);
        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;
}
于 2012-05-10T18:31:26.267 回答