まず、作成したプログラムがあります。
小数点以下1000桁(円周率)までを記載したファイルを読み込んだプログラムです。
次に、そのプログラムに以下の条件を追記したいと考えています。
1000桁までの整数値nを入力すると小数点以下n桁までにおいて、整数値の「3」を含む「0」から「9」の各数値の中で、もっとも出現回数の多い数値と、その出現回数を出力するプログラムです。
例えば
「入力」
9
「出力」
1:2
3:2
5:2
としたい
この場合のように1.3.5と3つの数字がある場合の「出力」は数字の小さい順に1行に1つづつ出力したい
現状は、コンパイルエラーになっています。
修正方法などの解決方法を教えてください。
c言語
1#include <stdio.h> 2//コマンドライン引数をmain関数の引数として与える 3int main(int argc, char *argv[]) { 4//ファイルポインタを宣言 5 FILE *fp; 6//データ読み込み用の引数cとファイルオープン時に使用する引数fileを宣言 7//円周率のファイルは小数点以下1000桁のため1の位とヌル文字分のスペースも用意する 8 char c[1002], file[1002]; 9 char ch; 10//配列指定用のi、標準入力用のnを宣言 11 int i,n,max; 12 int cc[10] = {0}; 13 //ファイルのオープン 14 fp = fopen(argv[1], "r"); 15 //ファイルを開けなかった場合 16 //ファイルポインタが「NULL」の時は、プログラムの処理を終了する 17 if (fp == NULL) { 18 printf("%s : file not opened.\n",file); 19//「return 1;」は プログラムが「異常終了」したことを表す 20 return 1; 21 } 22 23//ファイルを配列に読み込む 24//ファイルが終わりでないかつ配列を飛び出さないうちは,読み込みを続ける 25 while (! feof(fp) && i < 1002){ 26 fscanf(fp, "%c", &(c[i])); 27 i++; 28 } 29 30//ファイルのクローズ 31 fclose(fp); 32 33 34 35 for (; (ch = getchar())!=EOF;) { 36 switch (ch) { 37 case '0' : cc[0]++; break; 38 case '1' : cc[1]++; break; 39 case '2' : cc[2]++; break; 40 case '3' : cc[3]++; break; 41 case '4' : cc[4]++; break; 42 case '5' : cc[5]++; break; 43 case '6' : cc[6]++; break; 44 case '7' : cc[7]++; break; 45 case '8' : cc[8]++; break; 46 case '9' : cc[9]++; 47 } 48 } 49 50 //標準入力のデータを読み込む 51 scanf("%d,&n); 52 53 54//最大値は何か 55 max = cc[0]; 56 for (i = 0; i =< n; i++) { 57 if (max < cc[i]) { 58 max = cc[i]; 59 60 for (i=0; i<10; i++) printf("%d:%d\n", max,i); 61 62return 0; 63 64 65}
なんで main() の中に main() があるん?
修正いたしました
line 51: scanf("%d,&n);
" が閉じていません。
line 56: for (i = 0; i = < n; i++) {
= < なんて比較演算子はありません。
対応する } がありません。
軽く見たかんじですが、正直、結構メチャクチャです。ひとつ直せば別の部分でまたコンパイルエラーが発生しそうです。コンパイルエラーが直っても要望通りの動きをするまで苦労しそうです。
全部作ったつもりの未完成のコードをいきなりコンパイルして動かそうとするのではなく、少しずつコードを書き、動作を確認していくことをお勧めします。
承知しました。ありがとうございます。
#include <stdio.h>
//コマンドライン入力
int main(int argc, char *argv[]){
//intで変数i,n,maxを宣言
FILE *fp;
char pai[1003];
int i, n, max;
//コマンドラインから入力されたファイルのオープン
//NULLの場合はエラーメッセージ表示
if((fp = fopen(argv[1], "r")) == NULL){
printf("Can't open The file.\n");
return 1;
}
//出力範囲の整数値を読み込む
scanf("%d", &n);
//ファイル内のデータを読込む
while (fgets(pai, 1003, fp) != NULL);
// もっとも現れた数の回数を探索
max=0;
for(i=0; i<n+1; i++){
if(max<pai[i])max=pai[i];
}
//もっとも現れた数達を出力
for(i=0;i<n+1; i++){
if(max == pai[i]);
}
printf("%d:%d",pai[i],max);
//ファイルを閉じる
fclose(fp);
return 0;
}
上記のように修正いたしました。少数点以下n桁までの出力はできましたが、その後、もっとも多く出現する数字とその出現回数を出力できません。コンパイラはできましたが、出力数値が違うものです。
引き続き、解決方法を教えてください。