scanf成功转换请求格式的输入字符时(在本例中,是十进制整数"%d"),它返回一个1表示“转换成功”。
好吧,恐怕我理解不对。
我想使用这个特性立即过滤输入:如果输入不是整数(正数或负数),则请求另一个输入。

#include<stdio.h>
#include<stdlib.h>

int main(){
        int x;
        printf("\nThis function reads an integer\n");
        while(scanf("%d", &x) != 1){
                printf("Please type an integer:\n");
                scanf("%d", &x);
        }
        printf("\n%d is really an integer!\n", x);
        return 0;
}

但在这种情况下,输入2.15scanf只读取数字2,然后成功关闭循环。

最佳答案

%d的工作原理与strtol基本相同:它丢弃空白,然后读取数字,直到遇到第一个非数字字符,并将读取的数字转换为整数值。如果至少读取了一个数字,则转换将被视为成功,无论“停止读取”的字符是什么。
因此,在您的情况下.是一个非数字字符,但2已被读取,因此转换仅使用字符串"2"并成功。
要解决这个问题,首先需要考虑允许哪些字符结束整数(.显然不在其中)。然后读取字符,直到遇到其中一个字符,然后用strtol转换所有读取的内容。

07-24 09:46
查看更多