检查输入的';fgets&x27;在C中

检查输入的';fgets&x27;在C中,c,fgets,C,Fgets,我想检查用户写的字符是否少于30个。这是我下面的代码,但它不能按我希望的方式检查用户的输入。例如,如果我键入40个字符作为输入,它将不会打印无效输入。有人能告诉我如何检查输入是否正确吗 int main(int argc, char **argv) { char string[31]; printf("Enter a string: "); if (fgets(string, 30, stdin)) { printf("Ent

我想检查用户写的字符是否少于30个。这是我下面的代码,但它不能按我希望的方式检查用户的输入。例如,如果我键入40个字符作为输入,它将不会打印无效输入。有人能告诉我如何检查输入是否正确吗

int main(int argc, char **argv) {
    char string[31];
    printf("Enter a string: ");
    if (fgets(string, 30, stdin)) {
        printf("Enter a character too: ");
        char c;
        scanf("%c", &c);

        char *ptr = string;

        if (ptr = contains(ptr, c)) {
            printf("Found at position %ld\n", ptr - string + 1);
        } else {
            printf("Character did not found.\n");
        }
    } else {
        printf("Not valid input\n");
    }
    return 0;
}
fgets()
读取整行并将换行保留在缓冲区中。如果缓冲区小于所需大小,则缓冲区将不包含换行符,该换行符将与行的其余部分一起在后续调用
fgets()
时读取

fgets()
读取整行并将换行保留在缓冲区中。如果缓冲区小于所需大小,则缓冲区将不包含换行符,该换行符将与行的其余部分一起在后续调用
fgets()
时读取

你可以试试:

char string[32];
printf("Enter a string: ");
if(fgets(string,32,stdin)>30) {
   printf("Error: Too many characters");
   return 1;
}
你可以试试:

char string[32];
printf("Enter a string: ");
if(fgets(string,32,stdin)>30) {
   printf("Error: Too many characters");
   return 1;
}

这是因为
fgets()
正在执行您告诉它的操作,即:从
stdin
读取30个字节。
fgets()
成功读取了用户输入的40个字节中的30个字节。这就是为什么它不会转到您希望它转到的
else
语句。这是因为
fgets()
正在执行您告诉它的操作,即:从
stdin
读取30个字节。
fgets()
成功读取了用户输入的40个字节中的30个字节。这就是为什么它不会转到您希望它转到的
else
语句。不是真的。如果缓冲区太小,整行就不会被读取。这就是我所说的@stark。将尝试改进答案,谢谢。@stark修复了len==0不正确的EOF问题。如果缓冲区太小,整行就不会被读取。这就是我所说的@stark。将尝试改进答案,谢谢。@stark修复了len==0返回指针的EOF问题。返回一个指针。