簡體   English   中英

scanf()可以存儲值嗎?

[英]Can scanf() store values?

嗨,我現在正在學習C語言,並且練習我讀過的書時遇到了一些問題。 我的代碼是這樣的:

#include<stdio.h>
int main()
{
  unsigned char one=0;
  unsigned char two=0;
  printf("Quantity 1 = ");
  scanf("%d",&one);
  printf("Quantity 2 = ");
  scanf("%d",&two);
  printf("The value is %d",one);
  return 0;
}

為什么當我試圖看到one初始值的值而不是scanf之后的值?

您需要與%d說明符結合使用int類型,使用%c說明符使用char 並且%u使用無符號整數。

#include<stdio.h>
int main()
{
    unsigned int one=0; unsigned int two=0;
    printf("Quantity 1 = ");scanf("%u",&one);
    printf("Quantity 2 = ");scanf("%u",&two);
    printf("The value is %u",one);
    return 0;
}

Basicaly, scanf將嘗試從輸入讀取整數,並嘗試將其存儲在不夠大的內存位置,因此您將有未定義的行為。

你可以在這里找到很好的參考。

但是,如果您嘗試將字符用於輸入類型,您可能需要問問自己為什么沒有機會輸入第二個數量(如果您鍵入4並按Enter鍵)。 這是因為第二個scanf會將輸入鍵作為字符讀取。 此外,如果您嘗試鍵入21 (對於21一個),它將用2填充第一個值,用1填充第二個值(好吧,用它們的ASCII值)。

所以,要小心 - 確保始終為變量選擇正確的類型。

切勿使用scanf 切勿使用scanf 說真的, 永遠不要使用scanf

使用fgets (或getline ,如果你有的話)從用戶讀取整行輸入,然后將字符串轉換為帶有strtol或其親屬strtodstrtoul strsep也可能有用。

通過讀取其返回值來檢查scanf()是否正常工作。 要快速入門,請在此鏈接中閱讀有關scanf()的詳細信息。

你正在做的是使用"%d"將整數輸入到unsigned char變量中,因此scanf()可能無法正常工作。

更改

unsigned char one=0; unsigned char two=0;

unsigned int one=0; unsigned int two=0;

並且還使用%u而不是%d然后它將在scanf()之后打印該值。

您將變量one聲明為char:

unsigned char one=0;

但后來你告訴scanf讀取一個int

scanf("%d",&one);  /* %d means int */

Int大於char(通常為4字節對1字節),導致您描述的問題。

將您的scanf更改為:

scanf("%c",&one);  /* %c means char */

然后當你打印出值時,也打印一個char:

printf("The value is %c",one); /* %c means char */

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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