【问题标题】:Invalid input value while using char and scanf "%hhu"使用 char 和 scanf "%hhu" 时输入值无效
【发布时间】:2013-03-26 06:01:41
【问题描述】:

这就是代码

void main()
{
  unsigned char n,t;
  scanf("%hhu %hhu",&n,&t);
  printf("%hhu %hhu",n,t);
}

问题是当我分别输入 5 和 1 时,输出是 0 和 1。n 为 0,t 为 1。但是,当我将类型从 char 更改为 int/unsigned 时,输出是正确的:5 和 1。

问题是为什么用 char 请求(数字)输入会给出无效值?

【问题讨论】:

  • 你想用这个实现什么? scanf 期待 unsigned char* 带有这些格式字符串,这是有意的吗?
  • 示例程序没有给出你为我描述的错误输出(Ubuntu 12.04 上的 gcc)
  • 请问您在哪个平台上遇到过这种行为?
  • @bash.d (CMIIW) 除了存储一个字符,char可以用来存储1个字节的数字(-127..128 or 0..255 ) 正确的?我只是为了好玩而尝试它,然后我对错误感到好奇
  • 好的!给你

标签: c input char scanf


【解决方案1】:

int main(void)

scanf("%hhu %hhu",&n,&t);

这里 ---------- ^ ------^ unsigned char * 是预期的

printf("%hhu %hhu",n,t); 也一样

所以改变

char n,t;

unsigned char n,t;

【讨论】:

  • 仅第一行就足以获得我的支持 ;-)
  • ideone.com/A38Ze5,在你的图片中你仍然以错误的方式使用main,并且你没有包含stdio
  • 如果还是不行,用printf("%hhu %hhu\n",n,t);替换printf("%hhu %hhu",n,t);(注意末尾的\n)
  • @DavidRF 是的,您的代码在 ideone 中按预期运行,但是当我将您的代码粘贴到代码块时,它给了我同样的错误。奇怪,但可能与 Windows 相关的问题?
  • @DavidRF 在 C 中(不是在 C++ 中)不包括 stdio 没问题,但是是的,我写了糟糕的代码,谢谢你的提示
【解决方案2】:

除此之外

int main(void) 

至少,您还可能希望通过包含适当的标头来添加必要的原型:

#include <stdio.h>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    • 2016-09-07
    • 2015-06-09
    • 1970-01-01
    • 2015-04-06
    相关资源
    最近更新 更多