所以我有一个char数组并使用fgets我将字符串存储到我的fgets中。我想停止阅读并提示用户使用较少的字符再次输入字符串。我不希望存储的字符串太长而无法存储但只是被遗忘。
char questionLength[50];
printf("Second can you tell me the question for your answer\n");
fgets(questionLength, 50, stdin);
输入超过50个字符,提示用户重新输入字符串,如果小于或等于50个字符,则会存储该字符串。
答案 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;
}