限制输入字符串字符

时间:2018-12-04 11:41:53

标签: c arrays string input strlen

我正在尝试编写一个简单的代码,其中用户必须输入一个字符串,但是如果该字符串包含五个以上的字符,则应该打印出错误并返回-1。 我使用fgets获取输入,并使用strlen来计算字符串的长度。

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


int main()
  {
    char a[5];
    int length = 0;

    printf("Enter a string to calculate it's length\n");
    fgets(a,5,stdin);

    length = strlen(a)-1; // don't want the '\n' to be counted

    if(length > 5){

        printf("error");
    }
    printf("string length %d\n",length);


       return 0;
 }

当我输入的字符串超过5个字符时,它不会输出错误,而只会显示出字符串大小为三。

有人可以给我一个提示吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

使用strchr检查换行符。如果输入中没有换行符,请读取字符,直到找到换行符以清除输入缓冲区并重试。

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

int main( void) {
    char a[7];//five characters, a newline and a zero terminator
    int toolong = 0;

    do {
        if ( toolong) {
            printf ( "too many characters. try again\n");
        }
        toolong = 0;
        printf ( "enter up to five characters.\n");
        if ( fgets ( a, sizeof a, stdin)) {
            while ( ! strchr ( a, '\n')) {//check for newline
                toolong = 1;
                fgets ( a, sizeof a, stdin);//read more characters
            }
        }
        else {
            fprintf ( stderr, "fgets EOF\n");
            return 0;
        }
    } while ( toolong);

    return 0;
}

答案 1 :(得分:0)

fgets(a,5,stdin);

fgets始终读取1号字符。

阅读停止后        EOF或换行符。 因此,它仅读取4个字符。

length = strlen(a)-1;   // 4-1 = 3