用户必须输入大于0的数字才能打印一些东西。
当用户输入小于0的数字时,我的代码使用while循环。然后它要求用户再次输入一个数字。
while(x<=0){
print("Must enter a number greater than 0");
printf("Enter a number: ");
scanf("%i",&x);}
如何创建与上述格式类似的错误消息,但对于输入“x”或单词的用户。感谢
答案 0 :(得分:2)
由于使用数字格式的scanf进行读取,这意味着如果输入的内容无法读取为整数(123
)或整数的一部分({{ 1}}没问题,解析在3)之后很快停止,scanf失败(即它不能将输入解析为数字)。 Scanf返回成功解析的项目数。所以你希望你的情况是1。您可以检查返回值(如果它为0,则scanf无法从输入中获取任何数字),但如前所述,您仍然接受像123x
这样的thigs(并且“残差”x将在来自stdin的下一个scanf,如果你这样做的话)。
答案 1 :(得分:0)
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int main(void){
int x;
int ok=0;
do{
char buff[32], *endp;
long long num;
ok = !ok;//start true(OK)
printf("Enter a number: ");
fgets(buff, sizeof(buff), stdin);
x=(int)(num=strtoll(buff, &endp, 0));//0: number literal of C. 10 : decimal number.
if(*endp != '\n'){
if(*endp == '\0'){
printf("Too large!\n");
fflush(stdin);
} else {
printf("Character that can't be interpreted as a number has been entered.\n");
printf("%s", buff);
printf("%*s^\n", (int)(endp - buff), "");
}
ok = !ok;
} else if(num > INT_MAX){
printf("Too large!\n");
ok = !ok;
} else if(x<=0){
printf("Must enter a number greater than 0.\n\n");
ok = !ok;
}
}while(!ok);
printf("your input number is %d.\n", x);
return 0;
}