`
switch(selectedOption){
case 'B':
printf("Please enter the first number\n");
if (scanf("%f", &firstNumber) == 1){
printf("Is a valid number\n");
}
else{
printf("Is not a valid number\n");
}
}
`
我有一个学校作业,我必须编写一个计算器。其中一个要求是要求用户输入另一个数字,例如,如果他们输入一个字符而不是一个数字。我不知道如何去做这件事,我到处找,没有解决方案是有意义的。如果有人能帮助我解决这个问题,我将不胜感激。
2条答案
按热度按时间hpcdzsge1#
简单的回答是循环直到有效的输入被读取(假设输入来自交互代理,例如坐在终端的人)。
下列将无法运作:
问题是,当
scanf
看到一个不是数字的一部分的字符时,它将停止阅读输入,并将该字符推回到流中(c.f.ungetc
)。例如,如果输入为-foo
,则scanf
将读取空格,然后-
(可能是数字的一部分),然后是不是数字的一部分的f
。f
将被推回到流中,scanf
将返回0。在while循环的下一次迭代中,scanf
将读取f
,将其推回到流中并返回0。循环无限等。要中断无限循环,代码需要从流中读取一些内容并将其丢弃。一个选项是通过调用
scanf("%*s");
读取并丢弃下一个单词,或者通过调用scanf("%*s%*c");
丢弃下一个单词和后面的空白字符,或者通过调用scanf("%*[^\n]%*c");
丢弃行的剩余部分和换行符。例如:请注意,上面的代码会将
42foo
之类的输入视为有效。scanf
会将f
推回到流中并返回1,因为它读取了一个有效的数字42
。您可能需要读取下一个字符并检查它是否有意义。通过调用ungetc(ch, stdin);
,您始终可以将至少一个字符推回到流中,以便以后可以重新读取它。4uqofj5v2#
您不需要切换大小写。您只需要执行以下操作: