[英]Multiplication using fgets in C
我想做一些乘法。 我要求用戶輸入9位數字並乘以每個數字。 讓我們說如果用戶輸入123456789,那么我們將這樣做:
123456789
246824682
我們將用戶輸入乘以此代碼:
#include <stdio.h>
int main(void) {
char num[10];
int num1,num2,num3;
printf("Enter your num: ");
fgets(num,10,stdin);
num1 = num[1] * 2;
num2 = num[2] * 4;
num3 = num[3] * 6;
printf("%d %d %d", num1,num2,num3);
return 0;
}
當我運行這個是我得到的:
admin@matrix:~/cwork> ./lab2
Enter your num: 123
100 204 60admin@matrix:~/cwork>
我為什么得到100 204和60我雖然得到:2 8 18或2818!
首先,在C編程語言中,數組從0開始索引。因此,您需要將索引從[1]
, [2]
, [3]
更改為[0]
, [1]
, [2]
。
其次,輸入中的每個數字都是ASCII字符 。 因此字符2實際上存儲在數組中作為數字50.這就是num[1] * 2
為100的原因。
將數字轉換為您期望的數字的最簡單方法是從每個數字中減去'0'
。 總而言之,您的代碼應該如下所示
num1 = (num[0] - '0') * 2;
num2 = (num[1] - '0') * 4;
num3 = (num[2] - '0') * 6;
當你從stdin讀取時,你得到一個char數組。
所以在你的例子中用“123”
你的數組看起來像這樣:
num[1] == '2' == 50 // 50 is the ascii code for '2'
num[2] == '3' == 51 // 51 is the ascii code for '3'
所以你當然會得到100分,204分這些數字。
另請注意,數組以0開頭,而不是1!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.