Проверяет ввод fgets в C - PullRequest
1 голос
/ 08 апреля 2020

Я хочу проверить, пишет ли пользователь <30 символов или нет. У меня есть этот код ниже, но он не может проверить ввод пользователя так, как мне бы хотелось. Например, если я введу 40 символов в качестве ввода, я не буду печатать «Недопустимый ввод». Может кто-нибудь объяснить мне, как проверить, что вход будет правильным? Заранее спасибо! </p>

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

Ответы [ 2 ]

2 голосов
/ 08 апреля 2020

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 */;
0 голосов
/ 08 апреля 2020

Вы можете попробовать:

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