2013-05-18 115 views
0

我应该如何退出循环只需按下回车键: 我试过下面的代码,但它不工作!退出循环后点击输入c

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 
+0

第一件事:提供输入和输出,因为你不满意该程序。 第二件事:在使用之前初始化char c,因为它包含随机值。 第三件事:我已经试过你的代码,它可以按照你的想法工作。 – Ramsharan

+0

接下来的事情:您使用哪种操作系统进行编程? – Ramsharan

回答

1

最好的办法是使用fgets基于线路输入和检测,如果在该行的唯一的事情就是换行符。

如果不是,则可以使用sscanf输入的行来获取整数,而不是直接输入标准输入。

一个强大的线路输入功能可以在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; 
} 
+0

但是我怎样才能以上述形式输入!? – user2227862

+0

@ user2227862,请参阅更新,它提供了关于如何执行行输入,空行检测和转换的代码。 – paxdiablo

0

有新的换行之间的差异(\ n或10进制ASCII)和回车符(\ r或13位十进制Ascii)。 在你的代码,你应该尝试:

你也应该注意到,您的变量c不是第一次测试中初始化,如果你不希望与任何开始做输入“\ n”或“\ r” ,在第一次测试之前将一些价值归因于它会是一件好事。

+0

while循环内的条件始终为false,因为c不能同时为10和13,或'\ n'和'\ r'。 – Ramsharan

+0

你是对的Ramsharan,改变了代码。谢谢。 –

0

变化

j=0; 

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

当程序出来while循环,c包含'\n'所以下次程序不能while循环中去。除了'\n'之外,还应将c以及j=0分配给for循环内。