首页 > 解决方案 > 当我按下“q”键时,如何停止接受用户的输入?

问题描述

我整天研究这个问题,看到了所有其他类似的问题,但不知何故我错过了一些东西,我的代码根本不起作用。我注意到了一个错误;当程序按升序对数字进行排序时,通常不会读取第一个和最后一个数字。我只是对为什么会出现这个问题以及如何使它工作感到好奇。我想我的代码完全是荒谬的,所以我不想浪费你的时间,如果你能提供一些提示,这对我来说就足够了:)

#include <stdio.h>

int main ()
{
    int i,b,c,n;
    int number[200];
    char option;
 do
    {
        printf("Please enter numbers you wanna input: ");
        scanf("%d", &n);
        for(int i=0; i<n; ++i) {
        scanf("%d",&number[i]);
        }
    option = getchar ();
    while(getchar() != '\n');
}
while (option != 'q');


for (i=0; i<n; ++i)
    {
        for (b=i+1; b<n; ++b) 
          {
            if (number[i]>number[b])
            {
                c=number[i]; //i used c as temp.
                number[i]=number[b];
                number[b]=c;
            }
          }
    }
    printf("Sorted order of given numbers is this: \n");
    for (i=0; i<n; ++i)
        printf("%d\n",number[i]);

    return 0; }

标签: c

解决方案


如果您在数字后输入换行符,scanf("%d",&number[i]);则会将输入的换行符留在缓冲区中,并由option = getchar ();. 因此,option无法正确获得所需的用户输入。

那个部分

    option = getchar ();
    while(getchar() != '\n');

应该

    scanf(" %c", &option);

注意前面的空格%c。这意味着应该忽略空白字符(包括换行符)。


推荐阅读