我想在没有给出输入时从循环中断

时间:2016-12-09 06:09:54

标签: c

我有一个用c编写的代码:

int num1,num2;
while(1)
{
   scanf("%d",&num1);
   scanf("%d",&num2);
}

当程序运行时没有给出输入时,我想打破这个循环。

1 个答案:

答案 0 :(得分:2)

你问,这比我通常看到的要多得多。

尝试以下方法:

IAction contextClick = actionProvider.DoubleClick(xyz).Build();

你看,scanf系列函数返回成功转换的次数。上面,如果int num1, num2; while (1) { if (scanf(" %d %d", &num1, &num2) != 2) { /* End of input (Ctrl+D)? */ if (feof(stdin)) break; /* No, just invalid input. */ fprintf(stderr, "That was not two integer numbers. I'm out.\n"); break; } printf("You supplied %d and %d.\n", num1, num2); } 没有读取并转换两个整数,我们检查它是否失败,因为它遇到输入结束(如果它已经,那么scanf()为真)。否则,它必定已失败,因为输入是其他内容。我们无法重试,因为无法解析的输入仍然未读 - 下一次尝试将以同样的方式失败。 (有很多方法消费输入错误,但我只是逐行阅读输入,并尝试解析(或拒绝)每一行。)

我看到很多代码从不检查任何scanf系列函数的返回值,以及由此引起的行为的许多问题(不正确的输入导致无限循环,可能是内存不足,缓冲区溢出),即使阅读与任何scanf()函数相关的问题,它有时也是徒劳的。但是,你问。 (并且,另一个你,阅读这个问题和答案,但不是OP,在这件事上感兴趣。)这很好。这意味着,也许有人真正关心编写健壮的程序,只要输入与预期相差一点,就不会陷入恐慌。我想要强大的程序。