C编程帮助 - 用户退出程序的选项

时间:2014-03-15 00:47:07

标签: c

这是我最近问过的一个问题:

C Programming help - providing user with option to exit a program

我现在遇到了一个新问题。如果用户输入任何一个很好的字母,我可以让程序退出,但现在如果输入一个数字,则没有任何反应。 while循环似乎没有运行..

请你看看我的代码,看看你能发现什么是错的,谢谢。另外,理想情况下,如果用户希望退出,我希望关闭xterm的窗口。如果有人能告诉我如何做到这一点,我会很高兴。无论如何这里是代码:

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

int main()
{
     float number;
     float sum = 0;


     printf ("Please enter number or enter any letter to exit:\n");
     scanf ("%f", &number);

     // if user ENTERS a letter, program will terminate

     if(1!=scanf ("%f", &number))
     {
        getchar();
        printf ("Exiting the program...\n");
        exit(0);
     }


     while (1)
     {
        sum += number;
        printf ("Sum: %.2f\n", sum);
        printf ("Please enter number or enter any letter to exit:\n");
        scanf ("%f", &number);

        // if user ENTERS a letter, program will terminate

             if(1!=scanf ("%f", &number))
             {
                getchar();
                printf ("Exiting the program...\n");
                exit(0);
             }

     }

    return 0;
}

3 个答案:

答案 0 :(得分:0)

正如@BrianCain所评论的那样:您在scanf声明中第二次呼叫if。如果您输入了第一个scanf的字母,它会强制第二个立即失败;如果您输入了第一个号码,那么第二个号码正在等待您输入另一个号码。

答案 1 :(得分:0)

我删除了两个scanf函数,它似乎解决了问题

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

int main()
{
    float number;
    float sum = 0;


    printf ("Please enter number or enter any letter to exit:\n");


    // if user ENTERS a letter, program will terminate

    if(1!=scanf ("%f", &number))
    {
        getchar();
        printf ("Exiting the program...\n");
        exit(0);
    }


     while (1)
     {
        sum += number;
        printf ("Sum: %.2f\n", sum);
        printf ("Please enter number or enter any letter to exit:\n");


        // if user ENTERS a letter, program will terminate

        if(1!=scanf ("%f", &number))
        {
            getchar();
            printf ("Exiting the program...\n");
            exit(0);
        }
    }
    return 0;
}

你的scanf中删除了你上一次的值。

答案 2 :(得分:0)

虽然前两个答案基本上是正确的,但简单(和清晰)版本将是:

if(number == 1)
    break;

将其放在原始scanf()之后,完全摆脱其他if(..) ..;条件。这将测试是否输入数字'1',如果是,将打破无限循环,允许程序继续下去return 0;语句。

它还将处理可能令人困惑的风格,即具有退出条件(最终return 0;),这基本上是不可能的,或应该是。