You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

signed char存储负整数时输入输出异常问题求助

问题根因
  • 你使用%c格式符调用scanf时,每次只会从输入流中读取1个单个字符:输入-9时第一次读取到的是字符'-',输入2时读取到的是字符'2'(ASCII编码对应十进制值为50),这就是你遇到两类异常输出的直接原因。
  • signed char本身确实可以存储-128~127范围的整数,但你之前的用法是将其用于存储字符的ASCII编码值,没有做输入到数值的转换,自然无法实现存储整数的需求。
实现方案

你可以先读取首个字符判断是否为终止符?,如果不是就将该字符退回输入流,再读取整数存入signed char变量即可,示例代码如下:

#include <stdio.h>

int main() {
    signed char num;
    char first_char;

    while (1) {
        // 读取首个字符判断是否为终止符
        scanf("%c", &first_char);
        if (first_char == '?') {
            break;
        }
        // 将字符退回输入流,用于后续整数读取
        ungetc(first_char, stdin);
        // %hhd是专门用于读取signed char类型整数的格式符
        scanf("%hhd", &num);
        // 输出整数
        printf("%d\n", num);
        // 清空输入流中残留的换行符,避免下一轮循环读入空值
        while (getchar() != '\n');
    }
    return 0;
}
注意事项
  • 读取signed char类型的整数时,必须使用%hhd格式符,不能直接用%d,后者对应int类型,长度不匹配会引发内存读写错误。
  • 本方案支持存储的整数范围为signed char的原生取值范围:-128 ~ 127,超出该范围的整数会溢出。
  • 每次读取完成后清空换行符的操作不可省略,否则下一轮循环会直接读取到残留的换行符,导致逻辑异常。

内容的提问来源于stack exchange,提问作者charlotte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 01:24:03