Страницы

Поиск по вопросам

пятница, 12 июля 2019 г.

Почему компилятор выводит мусор при сложении символьных массивов?

#include #include const int N = 5; void main(void) { unsigned int i = 0, A[N], B[N], C[N], c = 0; while ((B[i] = getchar()) != '
') { i = i + 1; printf("%5d", B[i]); }
#include #include const int N = 5; void main(void) { unsigned char i = 0, A[N], B[N], C[N], c = 0;
while ((A[i] = getchar()) != '
') { i = i + 1; }
i = 0;
while ((B[i] = getchar()) != '
') { printf("%5c", B[i++]); }
for (i = 5; i > 0; i--) { C[c] = (A[i] + B[i]); c++; } printf("
");
for (i = 0; i < c; i++) { printf("%5c", C[i]); } _getch(); }


Ответ

Вам нужно что-то вроде
#include #include #include
int add(char * dest, char * src1, char * src2, unsigned int n) { dest[n] = 0; int carry = 0; for(int i = n-1; i >= 0; --i) { int op1 = (src1[i] == ' ') ? 0 : src1[i]-'0'; int op2 = (src2[i] == ' ') ? 0 : src2[i]-'0'; int res = op1 + op2 + carry; carry = 0; if (res > 9) { res -= 10; carry = 1; } dest[i] = res + '0'; } for(char * c = dest; *c == '0'; ++c) *c = ' '; return carry; }
int main(int argc, const char * argv[]) { char a[] = "12353163513251353123513451"; char b[] = "98650987847947749794597949"; char sum[sizeof(a)];
int res = add(sum,a,b,sizeof(a)-1); printf("%s+
%s=
%s
Overflow: %d

",a,b,sum,res);
strcpy(a,"12346541247246"); strcpy(b," 6537652"); res = add(sum,a,b,strlen(a)); printf("%s+
%s=
%s
Overflow: %d

",a,b,sum,res);
}

Комментариев нет:

Отправить комментарий