gpt4 book ai didi

c - 关于C中scanf的转换说明符

转载 作者:行者123 更新时间:2023-11-30 18:50:59 26 4
gpt4 key购买 nike

我对 C 中 scanf 的转换说明符有疑问。

#include <stdio.h>

int main(void)
{
int num1;
scanf("%hhd",&num1);
printf("%d \n",num1);
}

由于我在 scanf 函数中输入了 "%hhd" 作为转换说明符,因此当我输入“128”时,我希望 -128 存储在 num1。但结果显示num1中存储的是128。

即使我已使用 "%hhd" 将输入指定为 char int,为什么还会发生这种情况?

最佳答案

第 1 步,对于 scanf() 问题:检查结果。除非返回值表明某些内容已写入 num1,否则打印它不会反射(reflect)用户输入。

int num1;
if (scanf("%hhd",&num1) == 1) {
printf("%d \n",num1);
}

第 2 步:启用编译器警告。节省时间。

if (scanf("%hhd",&num1) == 1) {
// warning: format '%hhd' expects argument of type 'signed char *',
// but argument 2 has type 'int *' [-Wformat=]
<小时/>

Why does this happen even though I have used "%hhd" to specify input as char int?

这与整数类型无关:intchar。这是关于指针的:int *signed char *scanf() 中的 "%hhd" 匹配指针:signed char *(或 unsigned char *char *),不是 int 也不是 char

代码通过&num1,一个int *。兼容的代码将传递一个signed char *

If a conversion specification is invalid, the behavior is undefined. C11 §7.21.6.2 13

就是这样。代码违反了规则,预期的行为没有发生。使用正确的类型。

signed char num1;
if (scanf("%hhd",&num1) == 1) {
printf("%d \n",num1);
}

如果代码必须将结果保存在 int 中:

int num1;
signed char ch1;
if (scanf("%hhd",&ch1) == 1) {
num1 = ch1;
printf("%d \n",num1);
}

关于c - 关于C中scanf的转换说明符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38521273/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com