前提・実現したいこと
C言語において、多倍長整数の加算を行うプログラムの実装を考えています。加算の部分の実装は大体終わっているのですが、計算結果を自分の定義した関数に渡し結果を出力する過程が上手くいかず、困っています。
関数、構造体の引数や構造を変えれば、実装はできなくもないのですが、構造や引数は変えない方向性でお願いします。
該当のソースコード
ソースコードの大まかなワークフローは下の様な形です。
1.キーボードからの入力を2つと、結果表示用の値をTest構造体に入れる 2.(1.)で入れた値を、StructAdd関数に渡す。 3.結果表示用の値(関数の引数 r ,入れた値pAdd_Answer)をTest_print関数を介して、結果を表示する
C
1#define MAX_INPUT 100 2 3#include <stdio.h> 4#include <stdlib.h> 5#include <stdint.h> 6#include <string.h> 7#include <strings.h> 8 9// 二つの数を比較して大きい方を選択する 10int max(int a, int b) { return a > b ? a : b; } 11 12 13// 文字配列を逆順にする 14void ReverseStr(char* str){ 15 int size = strlen(str); 16 int i,j; 17 char tmp = {0}; 18 19 for(i = 0, j = size - 1; i < size / 2; i++, j--){ 20 tmp = str[i]; 21 str[i] = str[j]; 22 str[j] = tmp; 23 } 24 25 return; 26} 27 28 29// fgetsの入力に改行が含まれる場合、削除する。 30void remove_newline_ch(char *line) 31{ 32 int new_line = strlen(line) -1; 33 if (line[new_line] == '\n') 34 line[new_line] = '\0'; 35} 36 37 38 39// 構造体の定義 40struct Test { 41 char *val; 42}; 43 44// 長整数の表示関数 45// pを標準出力に表示する 46 47void Test_print(struct Test *p){ 48 49 char *String_Print; 50 51 String_Print = p->val; 52 53 printf("Number (in Func Print) is %s \n",String_Print); 54 55} 56 57 58// 加算関数 59// pとqの加算結果をrに入れる 60void Struct_add(struct Test *p, struct Test *q, struct Test *r){ 61 62 char *String_P , *String_Q , *String_R; 63 64 String_P = p->val; 65 String_Q = q->val; 66 String_R = r->val; 67 68 int p_Size = strlen(String_P); 69 int q_Size = strlen(String_Q); 70 71 int N = max(p_Size, q_Size); 72 char Add_Str_Lis[N]; 73 74 for (int i = 0; i < N; i++){ 75 76 int num1 , num2 , sum; 77 // OutOfIndexしないようにする。 78 if(p_Size-1 < i){ 79 80 num1 = 0; 81 } 82 else{ 83 num1 = (String_P[i]- '0'); // 数値化 84 } 85 86 if(q_Size-1 < i){ 87 88 num2 = 0; 89 } 90 else{ 91 num2 = (String_Q[i] - '0'); // 数値化 92 } 93 94 Add_Str_Lis[i] = (num1 + num2) + '0'; //文字化 95 96 } 97 98 ReverseStr(Add_Str_Lis); 99 String_R = Add_Str_Lis; 100 printf("Number(in Func add) is %s \n",String_R); 101 Test_print(r); 102 103} 104 105 106 107 108 109int main(){ 110 111 char input1[MAX_INPUT]; 112 char input2[MAX_INPUT]; 113 char Add_Char_answer[MAX_INPUT]; 114 115 struct Test Number1, Number2 , Add_Answer , Sub_Answer; 116 117 struct Test *pNumber1 = &Number1; 118 struct Test *pNumber2 = &Number2; 119 struct Test *pAdd_Answer = &Add_Answer; 120 struct Test *pSub_Answer = &Sub_Answer; 121 122 // fgetsから入力を受け取り、改行を消去した後に文字列を反転させる。 123 printf("Enter The First Number \n"); 124 fgets(input1 , MAX_INPUT , stdin); 125 remove_newline_ch(input1); 126 ReverseStr(input1); 127 128 printf("Enter The Second Number \n"); 129 fgets(input2 , MAX_INPUT , stdin); 130 remove_newline_ch(input2); 131 ReverseStr(input2); 132 133 134 //入力をlonginit構造体に入れる。 135 pNumber1 -> val = input1; 136 pNumber2 -> val = input2; 137 pAdd_Answer-> val = Add_Char_answer; 138 // longinit_addを呼び出して加算。 139 Struct_add(pNumber1 , pNumber2 , pAdd_Answer); 140}
<結果> Enter The First Number 100 Enter The Second Number 200 Number(in Func add) is 300 Number (in Func Print) is
発生している問題・エラーメッセージ
Struct_add関数内で加算の結果を表示するのは上手く動作しているのですが、Struct_add関数内でTest_print関数に値を渡して結果を表示するのが上手くいってないです。ポインターと構造体絡みのエラーだとは思うのですが、どの様に解決すればいいか分らないです。
回答2件
あなたの回答
tips
プレビュー