1 2 3 4 5
#include <stdio.h>
int main(){
int inp, len=0;
int a[10], b[10], c[10];
while(scanf("%d", &inp) != -1){
a[len] = inp;
len++;
}
// C言語の構文は、if, switch, while, for等に限られる。
// どのループが、何の処理をしているかブロック構文の中身を見なければ判断が出来ない。
// 判断がしにくい(可読性が低い)ということは、問題が発生したときに修正がしにくい。
for(int i=0; i<len; i++){
b[i] = a[i] * 2;
}
for(int i=0; i<len; i++){
c[i] = a[i] + 3;
}
for(int i=0; i<len; i++){
printf("%d ", a[i]);
}
printf("\n");
for(int i=0; i<len; i++){
printf("%d ", b[i]);
}
printf("\n");
for(int i=0; i<len; i++){
printf("%d ", c[i]);
}
printf("\n");
return 0;
}
#include <stdio.h>
int input_arr(int inputs[]){
int len=0;
int inp;
while(scanf("%d", &inp) != -1){
inputs[len] = inp;
len++;
}
return len;
}
void mul2(int len, int from[], int to[]){
for(int i=0; i<len; i++){
to[i] = from[i] * 2;
}
}
void plus3(int len, int from[], int to[]){
for(int i=0; i<len; i++){
to[i] = from[i] + 2;
}
}
void output_arr(int len, int arr[]){
for(int i=0; i<len; i++){
printf("%d ", arr[i]);
}
printf("\n");
}
int main(){
int len=0;
int inputs[10], arr1[10], arr2[10];
// 関数は抽象化(名前を付けること)
// より良く抽象化されたコードは短く、自然に読むことが出来る。
// おかしい箇所があれば、簡単に問題のある箇所(関数)が特定でき、修正がしやすい。
// 配列に入力から受け取った数値を入れ、2倍, +3した配列を作る。
len = input_arr(inputs);
mul2(len, inputs, arr1);
plus3(len, inputs, arr2);
// 同様の処理ならば関数を使いまわすことができ、問題が発生しにくくなる。
// それぞれの配列を出力する。
output_arr(len, inputs);
output_arr(len, arr1);
output_arr(len, arr2);
return 0;
}
$ gcc before.c
$ ./a.out < input
$ gcc after.c
$ ./a.out < input