用特定字母退出程序

时间:2018-07-06 03:49:07

标签: c

我今天开始进行C编程。

我想编写一个程序,不断询问用户提供一个整数作为输入,直到用户通过输入值'q'告诉程序停止。

到目前为止,我已经知道了:

#include <stdio.h>

int main () {
   int x;
   while ( x != "q") {
       printf("Enter the integer: ");
       x = getchar(); 
    }
return 0;
}

输出为:

Enter the integer: 1                                                                                    
Enter the integer: Enter the integer: 1 

,我无法退出程序。

我在做什么错了?

3 个答案:

答案 0 :(得分:1)

一个字符常量用单引号引起来:'q'"q"是一个字符串文字,它是一个字符数组,其衰减为指向第一个字符的指针。因此,编译器给出的警告

test.c: In function ‘main’:
test.c:5:14: warning: comparison between pointer and integer
    while ( x != "q") {
              ^~

这是正确的代码

#include <stdio.h>

int main (void) {
    // loop forever. Easier to make the condition to exit with if + break

    while (1) {
        printf("Enter the interger: ");

        // declare where it is used, to avoid it being used uninitialized
        int x = getchar();

        // if an error occurs or there are no more input, x equals to EOF.
        // to be correct, the program will need to handle the EOF condition
        // as well. Notice the single quotes around 'q'
        if (x == EOF || x == 'q') {
            break;
        } 
    }
    return 0; // main defaults to return 0 in standard C ever since 1999,
              // so this could have been omitted.
}

do { } while循环也可以工作:

    int x;
    do {
        printf("Enter the integer: ");
        x = getchar();
    } while (x != EOF && x != 'q');

但这可能不是那么好,因为由于条件现在已经被反转,因此更难以阅读,因此x需要在循环外部声明,您可能要做处理EOF / q之外的其他值,因此您仍然需要if


关于双重提示-之所以会发生,是因为换行符'\n'也是读取字符。

答案 1 :(得分:0)

我相信只有一个小错误,而不是while (x != "q")试试while (x != 'q')

答案 2 :(得分:0)

这是一个简单的逻辑。

这就是您所需要的...

#include <stdio.h>

int main()
{
    int x;

    while(x != 'q')
    {
        printf("Enter the integer: ");
        x = getchar();

        //clear buffer or do this
        getchar(); //this is required to avoid taking newline '\n'
                   //as the input (i.e. when you hit enter)
    }

    return 0;
}

问题应该是

“如何仅以特定字母退出程序而不按'Enter'?”

注意:我的回答没有回答。