C使用用户输入结束循环

时间:2015-04-02 06:50:20

标签: c arrays input while-loop scanf

我尝试编写一个程序,让用户将整数值插入数组,直到他们输入要停止的特定键,例如 ENTER X

int array_numb[100];
char quit = 'x';
printf("Enter as many values into the array as you want, pressing x will end the loop\n");
while(1==1){
    int i = 0;
    scanf("%i",&array_numb[i]);
    i++;
    array_numb[i] = quit;
}

我知道这是错的,但这是我的思考过程。有任何想法吗?谢谢你的帮助

4 个答案:

答案 0 :(得分:2)

    {li>

    Enter as many values into the array as you wantint array_numb[100];的同时,您将遇到麻烦。如果用户在委托sentinel value之前输入超过100个数字怎么办?你会超出分配的内存,不是吗?

  1. 您应该检查scanf()的返回值以确保输入正确。提供的格式说明符和输入类型不匹配将导致scanf()失败。查看man page了解详情。

  2. 您需要在break循环中有一个while(1)语句才能突破。否则,您需要在while()循环的控制表达式中使用条件语句来终止循环。

  3. 注意:恕我直言,阻止扫描用户输入的最佳方法是将scanf()的返回值与EOF相对照,这可以通过在linux上按 CTRL + D 并在Windows中按 CTRL + Z 来生成。

    您可以查看this answer以供参考。

答案 1 :(得分:1)

可以实现同样的目的,如下所示: scanf()可能会失败并检查返回值。扫描字符时scanf()失败

int i=0;
printf("Enter as many values into the array as you want, pressing x will end the loop\n");
while(i<100 && scanf("%d",&array_numb[i])==1)
{
   i++;
}

答案 2 :(得分:0)

带有scanf

%i在插入无效数据(例如插入字符)时将无法扫描数字,如果失败则返回0(在您的情况下)。

只需检查scanf的返回值即可。如果为零,请使用

if(getchar()=='x') //or if(getchar()==quit)
  break;

注意:使用

清除/刷新标准输入流(stdin
int c;
while((c=getchar())!='\n' && c!=EOF);

在循环之后以及break;之后。

答案 3 :(得分:0)

你可以学习一些东西并使用信号: http://man7.org/linux/man-pages/man7/signal.7.html

注册SIGINT,覆盖它,让它检查按下了哪个键,然后让它更改变量。在循环中检查此变量是0还是1。

信号具有最高优先级,无论循环如何都将执行信号代码。 示例:http://www.thegeekstuff.com/2012/03/catch-signals-sample-c-code/

对于这个案子来说这太过分了,但要知道这件事很有趣。信号是操作系统管理事件的方式,如进程终止,键盘输入等。请注意,如何使用它是特定于操作系统的,与C本身没什么关系。