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()`来读取额外的换行符。
`

更新于:2019年12月23日

445 次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告