我有一个用c编写的代码:
int num1,num2;
while(1)
{
scanf("%d",&num1);
scanf("%d",&num2);
}
当程序运行时没有给出输入时,我想打破这个循环。
答案 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,在这件事上感兴趣。)这很好。这意味着,也许有人真正关心编写健壮的程序,只要输入与预期相差一点,就不会陷入恐慌。我想要强大的程序。