回答編集履歴
2
getc 版追加
test
CHANGED
@@ -138,3 +138,48 @@
|
|
138
138
|
add: 9999999999
|
139
139
|
multi: 1219326311126352690
|
140
140
|
```
|
141
|
+
---
|
142
|
+
scanf で無く getc でちゃんと(?)制限無しにするなら
|
143
|
+
```c
|
144
|
+
/** file から(数字で無い文字をスキップ後、数字で無い文字が現れるまでの)数字列を読み込み、桁毎を NODE としたリストを返す */
|
145
|
+
NODE *create_list_from_file(FILE *file) {
|
146
|
+
NODE *head = create_node(NULL, 0);
|
147
|
+
for(int c; (c=getc(file)) != EOF; ) {
|
148
|
+
if(c < '0' || '9' < c) {
|
149
|
+
if(head->next == head) continue;
|
150
|
+
break;
|
151
|
+
}
|
152
|
+
create_node(head->prev, c-'0');
|
153
|
+
}
|
154
|
+
if(head->next == head && feof(file)) return NULL; //何も無いまま EOF は許さない
|
155
|
+
return normalize_list(head);
|
156
|
+
}
|
157
|
+
```
|
158
|
+
を追加して main を
|
159
|
+
```c
|
160
|
+
//char buf[2][1024]; //不要
|
161
|
+
|
162
|
+
int main(int argc, char *argv[]) {
|
163
|
+
NODE *list1 = create_list_from_file(stdin);
|
164
|
+
if(list1 == NULL) { fprintf(stderr, "error: list1 が見つからない."); return -1; }
|
165
|
+
NODE *list2 = create_list_from_file(stdin);
|
166
|
+
if(list2 == NULL) { fprintf(stderr, "error: list2 が見つからない."); return -1; }
|
167
|
+
|
168
|
+
print_list(list1, "list1: ");
|
169
|
+
print_list(list2, "list2: ");
|
170
|
+
|
171
|
+
NODE *add = addition_list(list1, list2);
|
172
|
+
print_list(add, "add: ");
|
173
|
+
free_list(add);
|
174
|
+
|
175
|
+
NODE *multi = multiplication_list(list1, list2);
|
176
|
+
print_list(multi, "multi: ");
|
177
|
+
free_list(multi);
|
178
|
+
|
179
|
+
free_list(list1);
|
180
|
+
free_list(list2);
|
181
|
+
|
182
|
+
return 0;
|
183
|
+
}
|
184
|
+
```
|
185
|
+
とすれば同じ結果になります。
|
1
追記
test
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
scanf の時点で長さに制限がかかってしまうので、 getc 使えみたいな条件があるのかもしれませんが。
|
1
2
|
```c
|
2
3
|
#include <stdio.h>
|
3
4
|
#include <stdlib.h>
|