私は現在CS50コースをやっていますが、私は信用問題に悩まされています。アイデアは、内蔵のチェックサムのためにカードを検証するプログラムを作ることです。最初のステップでは、2桁目ごとに2を掛けてから、すべての桁を一緒に加算します。混乱している文字列の相互作用
私のコードは完成していませんが、私は何が起こっているかを見ることができるようにいくつかの仲介ステップを印刷するように設定しました。
#include <stdio.h>
#include <string.h>
void checksum (char number[20]);
int main (void){
char *card;
printf("Please enter a card number:");
scanf("%s", card);
if (strlen(card) == 13 || strlen(card) == 16 || strlen(card) == 15) {
checksum(card);
}
else{
printf("Not a number. Please try again.\n");
main();
}
}
void checksum (char *number) {
int check = 0;
int digits = 0;
for(int i = 1; i < 17; i += 2){
printf("No%c\n", number[i]);
digits = (number[i] * 2);
printf("D%i\n", digits);
while (digits > 0) {
check += digits % 10;
printf("C%i\n", check);
digits = digits/10;
}
}
}
最初の部分は完全ではありませんが、それは私が現時点で懸念しているチェックサム機能です。 2番目の数字(5)を取るときはすべて正常です。しかし、次の行で2を掛け合わせると、結果は106(?)
誰かがここで何が起こっているのか説明できますか?
あなたが乗算されているASCII文字(すなわち、テキスト)。最初に数値に変換します。 – kaylum
[単一の文字をintに変換する方法](https://stackoverflow.com/questions/439573/how-to-convert-a-single-char-into-an-int)の可能な複製 – kaylum
まず、 'char * card; scanf( "%s"、card); '' charカード[20]; scanf( "%s"、card); ' –