gpt4 book ai didi

c - while 循环中的 fgets

转载 作者:太空宇宙 更新时间:2023-11-04 00:36:16 24 4
gpt4 key购买 nike

我在使用 fgets 时遇到问题,因为它在第一次进入 while 循环后立即返回 \n k 输入。由于我已经在 while 循环中并且我的 #1 try 已经写好了,我该如何处理呢?

int main() {
char r;

printf("How to input?\n");
printf("Keyboard ([K])\n File ([F])\n Leave ([E])\n");
scanf("%c", &r);

if (r == 'k' || r == 'K') {
printf("\nKeyboard\n");
opcaoTeclado();
} else {
// stuff
}
}

void opcaoTeclado() {
int try = 0;
char inputline[161];

while (try <= 10) {
printf("\n#%d try\n ", try);
fgets(inputline, 160, stdin);
try++;
}
}

最佳答案

调用 scanf() 后,输入中有一个换行符,由第一次调用 fgets() 读取。 fgets()遇到换行符 \n 时停止读取输入。因此,它不读取任何输入。

scanf() 之后添加对 getchar(); 的调用以使用换行符。

或者如果输入中有多个字符,您也可以使用循环来消费。

int c;

while((c= getchar()) != '\n' && c != EOF);

通常,最好避免将 scanf()fgets() 混合使用。您可以使用 fgets() 而不是 scanf() 并使用不太容易出现的 sscanf() 解析行。

关于c - while 循环中的 fgets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34791333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com