是否可以将带符号的字符输入到scanf函数中

问题描述 投票:0回答:2

我想知道是否可以将带符号的字符保存到 scanf 函数中

/* Program to scan in a negative char */
#include <stdio.h>
int main (){
    signed char myChar;/* trying to save a char as a signed value */
    printf("Enter a signed char: ");
    scanf("%c", &myChar ); /*main part of the code to scan in a signed char */
    printf("You entered:  %c \n", myChar); /*returns a signed char*/
    return 0;
}
c char scanf signed
2个回答
1
投票

您需要使用不同的格式:

#include <stdio.h>
int main (){
    signed char myChar;
    printf("Enter a signed char: ");
    scanf("%hhd", &myChar ); 
    printf("\nYou entered:  %hhd \n", myChar); 
    return 0;
}

https://godbolt.org/z/f1785qbvK


1
投票

是否可以将

signed char
输入到
scanf
函数中?

是的。 OP的

signed char myChar; scanf("%c", &myChar );
还可以。

更清楚地说,用户正在输入文本,并且可以成功保存在

signed char
中。


详细信息:您有 2 个广泛的选择

scanf()
从用户那里读取文本并将其保存到各种对象中。

读入一个字符并保存该字符代码

如果您想读取输入

"0"
并将其保存为字符
'0'
(例如 ASCII 48),请使用以下 3 种形式中的任何一种。
"%c"
期望匹配的指针为
char *
signed char *
unsigned char *
*1

char myChar_plain;
scanf("%c", &myChar_plain ); 

signed char myChar_signed;  // OP like code
scanf("%c", &myChar_signed ); 

unsigned char myChar_unsigned;
scanf("%c", &myChar_unsigned ); 

读取数字文本并将该文本保存为整数

如果您想读取

"0"
"123"
"-123"
"+123"
" 123"
等输入并保存为整数(尽管是小整数),请使用以下 2 种形式中的任何一种。

signed char myChar_signed;
scanf("%hhd", &myChar_signed ); 

unsigned char myChar_unsigned;
scanf("%hhu", &myChar_unsigned ); 

代码可以使用

d
代替
u
b, d, i, o, u, x, X, n
,用于其他碱基等。
b
与 C23。


好的代码,在这些情况下,会检查

scanf(...) == 1
以查看输入和转换是否成功。


*1 A

void *
也是可能的。不过还是留到以后再说吧。

如果不存在 l 长度修饰符,则相应的参数应为指向

char
signed char
unsigned char
void
的指针,该指针指向足够大以接受序列的存储。 C23dr § 7.23.6.2 12

© www.soinside.com 2019 - 2024. All rights reserved.