1

用户必须输入一个大于 0 的数字才能打印一些东西。

当用户输入小于 0 的数字时,我的代码使用 while 循环。然后它要求用户再次输入一个数字。

while(x<=0){
  print("Must enter a number greater than 0");
  printf("Enter a number: ");
  scanf("%i",&x);}

如何创建格式与上述类似的错误消息,但对于输入“x”或单词的用户。谢谢

4

2 回答 2

2

由于读取是使用具有数字格式的scanf完成的,这意味着如果您输入的内容无法读取为整数 ( 123) 或整数的一部分(123x可以,解析在 3 之后很快停止),scanf失败(即它不能将输入解析为数字)。Scanf 返回成功解析的项目数。所以你期望 1 在你的情况下。您可以检查返回值(如果它为 0,scanf 无法从输入中获取任何数字),但正如之前所说,您仍然接受类似的东西123x(并且“剩余”x 将在下一个来自标准输入的 scanf 中解析,如果你这样做)。

于 2013-05-08T06:34:10.983 回答
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;
}
于 2013-05-08T07:43:40.137 回答