###main と 関数部分に分けてプログラムを分割コンパイルして実行するプログラムを作る意図で想定外の結果が出力されない結果となりました。
自分はこの分野について初めてなものでコンパイルはうまくいったが、どうしてか関数の処理ができた後のプログラムが実行されずに終了しました。自分がどこでミスをしたかを指摘してほしいです。
重要:コード構造
1. 入力用ファイル
一行目 入力するコード量を指定する。
それ以降 99 以外をすべて関数を使って読み込む
main: 関数から入力完了したアドレス変数を表示する
自作関数: 入力ファイルから数字を2行目から99がある行目の前までのデータを予約されたデータを受け取る。それを返す。
###解決したいこと。 下に示した入力の縦のデータを expのように動的なメモリ分割を利用して表示をしたい
まずコードを下に表示します。
main
// array_scan_main.c #include <stdio.h> #include <stdlib.h> int* new_array_scan(int *pn); int main(void) { int *a = NULL; int i, n; fprintf(stderr, "goo"); a = new_array_scan(&n); for (i=0; i<n; i++) { printf(" %d", a[i]); fprintf(stderr, "main[%d]= %d \n", i, a[i]); } printf("\n"); free(a); a = NULL; return 0; }
###関数
// array_scan.c #include<stdio.h> #include<stdlib.h> int* new_array_scan(int *pn) { int n, i, *in= NULL; scanf("%d ", &n); fprintf(stderr, "n= %d \n", n); in= (int *)malloc(sizeof( int)*pn); if(in == NULL) { fprintf(stderr, "Fall2Malloc\n"); exit(1); } // fprintf(stderr, "ok1 \n"); for(i=0; i< n && scanf("%d ", &in[i]) != 99; i++) { if(scanf("%d ", &in[i]) == 99) {break;} fprintf(stderr, "ok2"); } // for(i=0; i< n; i++) {fprintf(stderr, "n[%d]= %d \n", i, in[i]);} pn = in; // for(i=0; i< n; i++) {fprintf(stderr, "n[%d]= %d \n", i, pn[i]);} return pn; }
.h
// array_scan.h int* new_array_scan(int *pn);
gcc で打ったコマンド
gcc -c -Wall -O3 array_scan.c array_scan_main.c && gcc array_scan.o array_scan_main.o && ./a < in.txt > out.txt
in.txt (最後の99は出力しない)
8
11
22
33
44
55
66
77
88
99
出力予想
11 22 33 44 55 66 77 88
out.txt の結果
何も出力されなかった。
使うソフト Cgwin64 サクラエディタ gcc可能
###試したこと:ネットでメモリ割り当てについて学習をした。まだこの分野に対してまだ多くは未知数である。 もし何かメモリ割り当てやリスト処理、ソーティング、ハッシュ について入門の教材があればぜひ教えてほしいです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。