[英]storing a negative integer in signed char
我正在嘗試獲取一個在char
中存儲整數的函數。 我需要使用char
而不是int
因為我需要使用問號 ( ?
) 來終止我的循環。 但是,我似乎無法使我的代碼正常工作。 這是我的工作:
int main() {
signed char num;
scanf("%c", &num);
if (num!='?') {
printf("%c\n", num);
}
return 0;
}
當我輸入一個負數(比如-9
)時,我得到輸出:
-
我在打印值時嘗試使用整數打印符號 ( %d
) 而不是%c
,正如我在這個問題上看到的: https : //www.quora.com/Can-I-assign-a-negative-number -to-a-char-variable-Why-or-why-not但讓我輸入的所有內容都很垃圾。 即當我輸入2
,它返回50
。
有人告訴我, signed char
應該在這里做這件事,但我不確定現在是不是這種情況。
謝謝。
如果您想掃描一個整數並同時掃描一個字符,例如?
你可以做:
喜歡
int num;
char c;
if (scanf("%d", &num) == 1)
{
// Okay you got an integer.
c = num; // BUT... watch out for over/underflow !!!
}
else if (scanf("%c", &c) == 1)
{
// Okay you got a char
if (c == '?')
{
// You got your ?
}
else
{
// Some other char
// Some kind of error handling... perhaps
c = 0;
}
}
else
{
// Input error that can't be recovered
exit(1);
}
您使用了錯誤的格式:
它必須是(但你必須輸入 63 而不是?
):
signed char num;
scanf("%hhd", &num);
或者
char str[6];
char num;
fgets(str,5,stdin);
if (str[0]!='?') {
if(sscanf(str, "%hhd", &num) == 1)
printf("%c\n", num);
else {/* handle scanf error*/}
這是完成這項工作的最小代碼:
#include <stdio.h>
int main(void)
{
char num[4], *p, sign=-1;
int valn = 0;
scanf("%s", num);
sign = num[0]=='-'? -1:+1;
p=num+(sign==-1);
while(*p) valn=valn*10+(*p++-'0');
printf("%d\n", valn*sign);
return 0;
}
% gcc negcharval.c
% ./a.out
32
32
% ./a.out
-32
-32
注意在正確邊界之間輸入數據,否則行為未定義。 char
是唯一一種您無法知道它是有符號還是無符號的類型,除非您明確聲明它。 因此,如果您想確保它已簽名,則必須說signed char
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.