簡體   English   中英

在有符號字符中存儲負整數

[英]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應該在這里做這件事,但我不確定現在是不是這種情況。

謝謝。

如果您想掃描一個整數並同時掃描一個字符,例如? 你可以做:

  1. 嘗試掃描一個整數
  2. 如果掃描整數失敗,請嘗試掃描一個字符

喜歡

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);
}

參見在線示例https://ideone.com/kTPE0M

您使用了錯誤的格式:

它必須是(但你必須輸入 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM