【发布时间】:2020-02-08 23:40:04
【问题描述】:
printf("Enter a number or type 'Exit' to exit\n");
long val = 0;
int y = 3;
scanf("%s", input);
val = atoi(input);
if (val < y) {
printf("Hey You!");
}
else {
printf("Error, no such cell exists.\n");
}
当用户输入“0”、“1”或“2”时,会打印“Hey You”。但是,当用户输入任何字母(例如“y”或“k”)时,也会打印“Hey You”。如何确保仅针对低于 3(即 y)的值打印“Hey You”。
【问题讨论】:
-
atoi函数返回0表示转换失败。如果您想区分0和y,则必须使用不同的函数,例如strtol -
是否需要
atoi()? -
n = scanf("%ld", &val)和n == 1检查应该非常简单 -
atoi()是一个遗留函数,从那时起错误处理不像今天那么重要。它在解析错误时返回0,因此您无法将返回值与有效文字0区分开来。如果您需要错误控制,那么最好使用sscanf(3)或strtoi(3),正如其他 cmets 中所建议的那样。