【发布时间】:2018-04-09 05:00:55
【问题描述】:
假设我有一个 while 循环,当条件“isDone”设置为 true 时该循环将结束。在 while 循环中,我要求用户输入一个整数来继续循环,或者输入一个字符来结束它(通过将“isDone”设置为 true)。
我将如何仅使用 one scanf() 来解决这个问题?
【问题讨论】:
-
您根本不应该使用
scanf进行用户输入。请改用fgets或类似的东西。 -
您只需要考虑整数输入后留在输入缓冲区中的
'\n'。由于%c格式说明符NOT 丢弃了前导空格,因此您必须在尝试读取char之前删除'\n'和任何其他杂散字符,例如int c = getchar(); while (c != '\n' && c != EOF) c = getchar();然后读你的性格。 (不,您不能使用相同的scanf。使用%d将导致[0-9]以外的任何内容匹配失败) -
@DavidC.Rankin 或者你可以养成在每个
scanf之后加入一个空的getchar()的习惯,以咀嚼留在标准输入中的换行符。 -
嗯,你可以,但这并不能防止用户做一些愚蠢的事情,比如输入
43abc,scanf ("%d", ...)将转换43,将abc\n留在输入缓冲区中。对于混合输入问题,这是scanf的旧循环射击小队——可行,但每个I和T都必须加点。 -
" %c%d"可以解决问题,但与fgets()的初读相比,后期处理的数量甚至不值得进行学术练习。