scanf()可以存储值吗?

pau*_*kis 5 c scanf

嗨,我现在正在学习C语言,并且练习我读过的书时遇到了一些问题.我的代码是这样的:

#include<stdio.h>
int main()
{
  unsigned char one=0;
  unsigned char two=0;
  printf("Quantity 1 = ");
  scanf("%d",&one);
  printf("Quantity 2 = ");
  scanf("%d",&two);
  printf("The value is %d",one);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么当我试图看到one初始值的值出现而不是后面的值scanf?

Nem*_*ric 8

你需要使用int与%d说明符结合的类型,并char使用%c说明符.并且%u使用无符号整数.

#include<stdio.h>
int main()
{
    unsigned int one=0; unsigned int two=0;
    printf("Quantity 1 = ");scanf("%u",&one);
    printf("Quantity 2 = ");scanf("%u",&two);
    printf("The value is %u",one);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Basicaly,scanf将尝试从输入中读取整数,并尝试将其存储在不够大的内存位置,因此您将具有未定义的行为.

你可以在这里找到很好的参考.

但是,如果您尝试将字符用于输入类型,您可能需要问问自己为什么没有机会输入第二个数量(如果您键入4并按Enter键).这是因为第二个scanf将输入键作为一个字符.此外,如果您尝试键入21(对于二十一个),它将填充第一个值,2第二个用1(以及它们的ASCII值).

所以,要小心 - 确保始终为变量选择正确的类型.

  • 并且在处理无符号整数时使用`%u`.(http://www.cplusplus.com/reference/cstdio/printf/) (3认同)