C-我在获取字符串时遇到问题

问题描述 投票:-1回答:1

我编写了一个读取和检查字符串的函数,但是出了点问题,好像stdin缓冲区没有正确清空。我想是因为当我在输出中插入第一个字符串并按Enter时,程序只是开始换行,而我必须重新插入该字符串并再次按Enter以使其接受。

如果字符串正确,则返回1,否则返回0。

函数是:] >>

int leggiStringhe(char* stringa, int lunghezza_massima, int lunghezza_minima) {

   unsigned int i = 0;
   unsigned int flag = 0;
   char buffer[MAX_LUNGHEZZA_BUFFER];

   while(getchar() != '\n');

   do {

        fgets(buffer, MAX_LUNGHEZZA_BUFFER, stdin);


        while( buffer[i] != '\n'){
            i++;
        }


        if( i > lunghezza_massima){
            printf("\nHai inserito una stringa troppo lunga, riprova:  ");
        } else if(i < lunghezza_minima) {
            printf("\nHai inserito una stringa troppo corta, riprova:  ");
        }
        else { flag = 1; }

   } while( i > lunghezza_massima || i < lunghezza_minima);

    buffer[i]= '\0';
    strcpy(stringa, buffer);

    return flag;
}

PS:我不能使用fflush()或其他函数,因为我使用repl.it。

我编写了一个读取和检查字符串的函数,但是出了点问题,好像stdin缓冲区没有正确清空。我想是因为当我在输出中插入第一个字符串并按...

c string buffer fgets
1个回答
1
投票

getchar读取一个字符。 while(getchar() != '\n') ;(用于强调的多余空格)读取整行,一次读取一个字符。如果您运行的程序带有来自回显其输入的tty的stdin,则您会看到键入的键(包括最后的换行符)被打印在屏幕上,并被程序使用(并忽略)。忽略第一行后,fgets读取第二行。

© www.soinside.com 2019 - 2024. All rights reserved.