首页 > 解决方案 > 检查 C 中“fgets”的输入

问题描述

我想检查用户是否写了少于 30 个字符。这是我下面的代码,但它无法按照我想要的方式检查用户的输入。例如,如果我输入 40 个字符作为输入,它不会打印Not valid input。谁能解释我如何检查输入是否正确?

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;
}

标签: cfgets

解决方案


fgets()读取整行并将换行符保留在缓冲区中。如果缓冲区比需要的小,则缓冲区将不包含换行符,该换行符连同该行的其余部分将在随后的调用中被读取fgets()

fgets(buffer, sizeof buffer, stdin);
size_t len = strlen(buffer);
if (!len) /* mal-formed input */;
if (buffer[len - 1] != '\n') /* error if not eof */;

推荐阅读