点击进入c后退出循环

时间:2013-05-18 05:27:26

标签: c input

如何通过按Enter键退出循环: 我尝试了以下代码,但它无法正常工作!

  int main()
    {
        int n,i,j,no,arr[10];
        char c;
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
           j=0;
           while(c!='\n')
           {
            scanf("%d",&arr[j]);
            c=getchar();
            j++;
           }
          scanf("%d",&no);
        }
        return 0;
    }

我必须按如下方式接受输入:

3//No of inputs
3 4 5//input 1
6
4 3//input 2
5
8//input 3
9

4 个答案:

答案 0 :(得分:2)

您最好的选择是使用fgets进行基于行的输入,并检测该行中唯一的内容是换行符。

如果没有,您可以sscanf输入的行获得整数,而不是直接scanf标准输入。

可以在this answer中找到健壮的线路输入功能,然后您只需修改scanf即可使用sscanf

如果您不想使用该全功能输入功能,可以使用更简单的方法,例如:

#include <stdio.h>
#include <string.h>

int main(void) {
    char inputStr[1024];
    int intVal;

    // Loop forever.

    for (;;) {
        // Get a string from the user, break on error.

        printf ("Enter your string: ");
        if (fgets (inputStr, sizeof (inputStr), stdin) == NULL)
            break;

        // Break if nothing entered.

        if (strcmp (inputStr, "\n") == 0)
            break;

        // Get and print integer.

        if (sscanf (inputStr, "%d", &intVal) != 1)
            printf ("scanf failure\n");
        else
            printf ("You entered %d\n", intVal);
    }

    return 0;
}

答案 1 :(得分:0)

新换行符(\ n或10十进制Ascii)与回车符(\ r或十进制十进制Ascii)之间存在差异。 在您的代码中,您应该尝试:

    switch(c)
    {
      case 10:
        scanf("%d",&no);
        /*c=something if you need to enter the loop again after reading no*/
        break;
      case 13:
        scanf("%d",&no);
        /*c=something if you need to enter the loop again after reading no*/
        break;
      default:
        scanf("%d",&arr[j]);
        c=getchar();
        j++;
        break;
    }

你还应该注意你的变量c没有在第一次测试中初始化,如果你不希望任何以“\ n”或“\ r \ n”开头的输入,最好将一些值归于它之前第一次测试。

答案 2 :(得分:0)

更改

j=0;

j=0;c=' ';//initialize c, clear '\n'

答案 3 :(得分:0)

当程序退出while循环时,c包含'\n',因此下次程序无法进入while循环。您应该为c以外的'\n'以及j=0循环中的for分配一些值。