1

我应该如何通过按回车键退出循环:我尝试了以下代码,但它不起作用!

  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

4 回答 4

2

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

如果没有,那么您可以sscanf在您输入的行中获取一个整数,而不是直接scanfing 标准输入。

在这个答案中可以找到一个强大的行输入功能,然后你只需要修改你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;
}
于 2013-05-18T05:31:26.857 回答
0

改变

j=0;

j=0;c=' ';//initialize c, clear '\n'
于 2013-05-18T08:06:28.147 回答
0

当程序退出while循环时,c包含'\n'所以下次程序不能进入while循环内。除了内部循环之外,您应该为c其他值分配一些值。'\n'j=0for

于 2013-05-18T14:10:55.237 回答
0

换行符(\n 或 10 位十进制 Ascii)和回车(\r 或 13 位十进制 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”开头的输入,最好在第一次测试之前为其分配一些值.

于 2013-05-18T05:47:46.937 回答