我编写了一个读取和检查字符串的函数,但是出了点问题,好像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缓冲区没有正确清空。我想是因为当我在输出中插入第一个字符串并按...
getchar
读取一个字符。 while(getchar() != '\n') ;
(用于强调的多余空格)读取整行,一次读取一个字符。如果您运行的程序带有来自回显其输入的tty的stdin,则您会看到键入的键(包括最后的换行符)被打印在屏幕上,并被程序使用(并忽略)。忽略第一行后,fgets
读取第二行。