如果字符太多,请停止从fgets读取

时间:2016-11-30 15:15:52

标签: c

所以我有一个char数组并使用fgets我将字符串存储到我的fgets中。我想停止阅读并提示用户使用较少的字符再次输入字符串。我不希望存储的字符串太长而无法存储但只是被遗忘。

char questionLength[50];
  printf("Second can you tell me the question for your answer\n");
  fgets(questionLength, 50, stdin);

输入超过50个字符,提示用户重新输入字符串,如果小于或等于50个字符,则会存储该字符串。

3 个答案:

答案 0 :(得分:1)

您可以检查questionLength中的最后一个字符是否为换行符(fgets()如果有空格,则会在换行符中读取)。如果是这样,你知道它小于或等于50个字符。 否则,输入时间会更长。

当输入完全 49个字节时,则不会有换行符。您可以通过再读一个字符来处理它(更改questionLength大小为51)。

答案 1 :(得分:0)

检查最后一个字符是否为换行符。如果是,输入是好的(你可能想要删除换行符),否则读取所有可用的字符,包括下一个换行符(注意读取错误,eof)并重复。

else if ( is_admin() ) {
   require_once('admin/functions_admin.php'); 
}

答案 2 :(得分:0)

您将知道是否读取了整个字符串,因为它包含newline。如果你想丢弃任何长字符串的剩余部分,一个简单的方法是首先阅读所有字符串。如果只是一次性阅读,那就很好。

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

#define STRLEN 50

int main(void) 
{
    char questionLength[STRLEN+2];          // 1 for newline, 1 for EOS
    int tries;

    while(1) {
        tries = 0;
        printf("Second can you tell me the question for your answer\n");
        do {
            if(fgets(questionLength, sizeof questionLength, stdin) == NULL) {
                exit(1);
            }
            tries++;
        } while(strchr(questionLength, '\n') == NULL);

        if(tries == 1) {
            printf("You entered: %s", questionLength);
        }
        else {
            printf("Your entry was too long\n");
        }
        printf("\n");
    }
    return 0;
}