[英]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()
的詳細信息。
你正在做的是使用"%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.