![](/img/trans.png)
[英]Can someone find the problem in my code related to IF STATEMENT in C++?
[英]Hexa Calculator Problem. Can someone check my code again?
所以我回來參加我的學校項目。 老師給了我們更多的代碼。 十六進制計算器。 乍看之下,它看起來已經完成了,但是...數學是錯誤的。 有人可以看一下這段代碼,然后告訴我什么地方出錯了,或者我可以做些什么來使它正確? 我需要將大部分代碼保持原樣。 所以我不能改變原則。 我必須堅持這一點。 當我運行此代碼時,我確實得到了結果,但這不是我需要的結果。 我需要執行類似“ 1cec + bec = 28d8”的操作。 同樣,我沒有得到錯誤,但是沒有得到正確的結果。
#include <iostream>
#include <cstring>
using namespace std;
int test(char[], int);
void decal(char[], int n);
int add2(char a, char b, int r);
void add(char a[], char b[], char c[]);
int main()
{
char a[10], b[10], c[10];
int valid;
do {
cout << "Insert first number (maximum 5 char hexa):" << endl;
cin >> a;
valid = test(a, strlen(a));
if(!valid)
cout << "Error." << endl;
} while (!valid);
cout << "First number: " << a << endl;
decal(a, strlen(a));
cout << "First number after completing: " << a << endl;
do {
cout << "Insert 2nd number (maximum 5 char hexa):" << endl;
cin >> b;
valid = test(b, strlen(b));
if(!valid)
cout << "Error." << endl;
} while (!valid);
decal(b, strlen(b));
cout << "2nd number: " << b << endl;
add(a, b, c);
cout << "Rezultat: " << c << endl;
return 0;
}
void add(char a[], char b[], char c[])
{
int i, r=0, sab;
c[6] = '\0';
for(i = 4; i>= 0; i--)
{
sab = add2(a[i], b[i], r);
if(sab < 10)
{
r = 0;
c[i+1] = sab + 48; // '0' ... '9'
}
else
if(sab < 16)
{
r = 0;
c[i] = 97 + (sab - 10); // 'a' ... 'f'
}
else
{
r = 1;
sab = sab - 16;
if(sab < 10)
{
r = 0;
c[i+1] = sab + 48; // '0' ... '9'
}
else
{
r = 0;
c[i] = 97 + (sab - 10); // 'a' ... 'f'
}
}
}
c[0] = 48 + r;
}
int add2(char a, char b, int r)
{
int ai, bi, ci, ai1, bi1;
ai = tolower(a);
if(ai <= 57)
ai1 = ai - 48;
else
ai1 = ai - 97 + 10;
bi = tolower(b);
if(bi <= 57)
bi1 = bi - 48;
else
bi1 = bi - 97 + 10;
ci = ai1 + bi1;
return ci;
}
int test(char x[], int n)
{
if(n > 5)
return 0;
for(int i = 0; i < n; i++)
{
if(x[i] <48 || (x[i] > 57 && x[i] < 65) || (x[i] > 70 && x[i] < 97) || x[i] > 102)
return 0;
}
return 1;
}
void decal(char x[], int n)
{
int i, nz;
x[5] = '\0';
nz = 5 - strlen(x);
if(nz > 0) {
for(i = 0; i < n; i++)
x[5 - i-1] = x[n-i-1];
}
for(i = 0; i < nz; i++)
x[i] = '0';
}
add2
將r
(似乎是一個進位位)作為參數,但實際上並未使用它。
無論如何,計算r
的方法是沒有意義的。 恰好在一個位置將其設置為1
,但是隨后幾行將其無條件地重置為0
。
最重要的是,您正在放棄所有進位。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.