用户必须输入一个大于 0 的数字才能打印一些东西。
当用户输入小于 0 的数字时,我的代码使用 while 循环。然后它要求用户再次输入一个数字。
while(x<=0){
print("Must enter a number greater than 0");
printf("Enter a number: ");
scanf("%i",&x);}
如何创建格式与上述类似的错误消息,但对于输入“x”或单词的用户。谢谢
用户必须输入一个大于 0 的数字才能打印一些东西。
当用户输入小于 0 的数字时,我的代码使用 while 循环。然后它要求用户再次输入一个数字。
while(x<=0){
print("Must enter a number greater than 0");
printf("Enter a number: ");
scanf("%i",&x);}
如何创建格式与上述类似的错误消息,但对于输入“x”或单词的用户。谢谢
由于读取是使用具有数字格式的scanf完成的,这意味着如果您输入的内容无法读取为整数 ( 123
) 或整数的一部分(123x
可以,解析在 3 之后很快停止),scanf失败(即它不能将输入解析为数字)。Scanf 返回成功解析的项目数。所以你期望 1 在你的情况下。您可以检查返回值(如果它为 0,scanf 无法从输入中获取任何数字),但正如之前所说,您仍然接受类似的东西123x
(并且“剩余”x 将在下一个来自标准输入的 scanf 中解析,如果你这样做)。
#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;
}