c - scanf() 函数不起作用?

标签 c

<分区>

这可能是一个简单的问题,但我搜索了很多仍然没有弄明白。 我通过 gcc 编译下面的代码片段并从终端运行程序。正确的是,它允许输入一个 int 和一个 char,但它不允许。它不等待输入字符??

这里的任何人都可以帮助我。提前致谢!

#include <stdio.h>

int main()
{

  char c;
  int i;

  // a
  printf("i: ");
  fflush(stdin); scanf("%d", &i);

  // b
  printf("c: ");
  fflush(stdin); scanf("%c", &c);

  return 0;

最佳答案

%d 将读取连续的数字,直到遇到非数字。 %c 读取一个字符。可能发生的事情是你给它一个数字(几位数字),然后是一个新行。 %c 然后读入该新行。您可能打算让 fflush(stdin); 丢弃任何尚未阅读的内容,但不幸的是,that's undefined behavior .

解决方案是在读取字符之前丢弃所有空格:

scanf(" %c", &c);

注意开头的空格。这意味着丢弃所有空格。

关于c - scanf() 函数不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18425307/

相关文章:

java - 找不到 native 方法 : com. example.pjtest.JniClass.get_time:()C

c++ - 是否允许枚举具有未列出的值?

java - 创建时调用的 JNI 方法对象

c++ - C/C++ isspace() 跳过多字节字符串字符

C shmat 函数

c - 为什么需要execstack才能在堆上执行代码?

c - 结束这个 while 循环我做错了什么

c - 用于从 matlab 创建可执行 .mexa64 文件的 Makefile

c - 打印出结构体数组

c - 如何在C中读取格式化数据?