C语言中,如果`scanf()`之后跟着`fgets()`/`gets()`/`scanf()`,会出现什么问题
问题描述了如果`scanf`后面跟着`fgets()`/`gets()`/`scanf()`,程序的运行结果或输出。
`fgets()`/`gets()` 后跟 `scanf()`
示例
#include<stdio.h> int main() { int x; char str[100]; scanf("%d", &x); fgets(str, 100, stdin); printf("x = %d, str = %s", x, str); return 0; }
输出
Input: 30 String Output: x = 30, str =
解释
`fgets()`和`gets()`用于在运行时从用户获取字符串输入。在上面的代码中,当我们输入整数后,它不会获取字符串值,因为我们在整数后输入了换行符,`fgets()`或`gets()`会将换行符作为输入,而不是预期的“String”输入。
`scanf()` 后跟 `scanf()`
为了重复使用`scanf()`后跟`scanf()`,我们可以使用循环。
示例
#include<stdio.h> int main() { int a; printf("enter q to quit"); do { printf("
enter a character and q to exit"); scanf("%c", &a); printf("%c
", a); }while (a != ‘q’); return 0; }
输出
Input: abq Output: enter q to quit enter a character and q to exita a enter a character and q to exit enter a character and q to exitb b enter a character and q to exit enter a character and q to exitq
解释
在这里,我们看到在额外的换行符后,还有一行额外的“输入字符并输入q退出”,这是因为每次`scanf()`都会在缓冲区中留下一个换行符,而下一个`scanf()`会读取它。解决这个问题的方法是用`scanf()`中的类型说明符使用`%c`,例如`scanf("%c");`,或者使用额外的`getchar()`或`scanf()`来读取额外的换行符。
`
。
广告