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

能否使用scanf函数输入并存储signed char类型数据?

能否用scanf保存signed char类型数据?

可以,但你的测试代码没搞清楚signed char的本质和scanf格式符的对应关系,没法实现“输入负字符”的需求。

问题出在哪?

你用%c格式符读取数据时,scanf会读取输入的单个ASCII字符,比如输入'-',存的是这个符号的ASCII值(45,正数),而不是一个负的signed char数值。signed char本质是8位有符号整数(通常范围-128~127),如果要输入它的数值(比如-50),不能用%c。

正确的实现方式

如果要输入一个整数并保存为signed char,可以用%d格式符,配合类型转换处理:

方法1:直接转换指针类型

/* 读取signed char数值的程序 */
#include <stdio.h>
int main (){
    signed char myChar;
    printf("Enter a signed char value (-128 to 127): ");
    // %d期望接收int*类型,将signed char*强制转换为int*
    scanf("%d", (int*)&myChar);
    printf("你输入的字符:%c | 对应的数值:%d\n", myChar, myChar);
    return 0;
}

方法2:用中间变量中转

#include <stdio.h>
int main (){
    signed char myChar;
    int temp;
    printf("Enter a signed char value (-128 to 127): ");
    scanf("%d", &temp);
    // 将输入的int值强制转换为signed char
    myChar = (signed char)temp;
    printf("你输入的字符:%c | 对应的数值:%d\n", myChar, myChar);
    return 0;
}

补充说明

如果你的需求是读取一个字符,把它的ASCII值存为signed char,那%c是可行的——但标准ASCII没有负数,只有部分系统支持的扩展ASCII才会有负的字符编码,这种场景很少见。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 19:22:28