c++ - 使用 %c 扫描整数,使用 %d 扫描字符 : unexpected results

标签 c++ c printf output scanf

我无法为以下代码的输出给出正确的理由。谁能帮帮我。

int main()
{
  int i;
  char ch;
  scanf("%c",&i);
  scanf("%d",&ch);
  printf("%d\n%c",i,ch);
  return 0;
}

输入输出:

input: 
a
45
output:
0
-

最佳答案

您正在将 int 读入 char。假设 sizeof(int) != sizeof(char),这将导致 scanf 写入超出 ch 的末尾,并产生未定义的后果。

您应该为 int 参数使用 %i 格式说明符,为 char 参数使用 %c

int main()
{
  int i;
  char ch;
  scanf("%c",&ch);
  scanf("%d",&i);
  printf("%d\n%c",i,ch);
  return 0;
}

关于c++ - 使用 %c 扫描整数,使用 %d 扫描字符 : unexpected results,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17862659/

相关文章:

c++ - 关于空与零的问题

c - 寻找问题

c - 将使用 MSYS2 和 MingW 构建的程序发送给最终用户的正确方法是什么?

使用包含 float 的 sprintf 创建固定长度输出字符串

php - 具有动态参数量的sprintf

c++ - 我怎样才能让这个鼠标操纵杆程序工作?

使用静态变量的 C++ 继承成员函数

c - 如何管理共享库中的 undefined symbol

c - 如何在 C 中打开文件以读取和写入其他文件?

c++ - createButton OpenCV 新 Qt 功能