如何通过按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
答案 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
分配一些值。