質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

1回答

2967閲覧

作成したプログラムに条件を加えた際の修正方法

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2021/05/30 02:02

編集2021/05/30 02:18

まず、作成したプログラムがあります。
小数点以下1000桁(円周率)までを記載したファイルを読み込んだプログラムです。

次に、そのプログラムに以下の条件を追記したいと考えています。
1000桁までの整数値nを入力すると小数点以下n桁までにおいて、整数値の「3」を含む「0」から「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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2021/05/30 02:09

なんで main() の中に main() があるん?
退会済みユーザー

退会済みユーザー

2021/05/30 02:18

修正いたしました
episteme

2021/05/30 02:22 編集

line 51: scanf("%d,&n); " が閉じていません。 line 56: for (i = 0; i = < n; i++) { = < なんて比較演算子はありません。 対応する } がありません。
dodox86

2021/05/30 02:29

軽く見たかんじですが、正直、結構メチャクチャです。ひとつ直せば別の部分でまたコンパイルエラーが発生しそうです。コンパイルエラーが直っても要望通りの動きをするまで苦労しそうです。 全部作ったつもりの未完成のコードをいきなりコンパイルして動かそうとするのではなく、少しずつコードを書き、動作を確認していくことをお勧めします。
退会済みユーザー

退会済みユーザー

2021/05/30 02:32

承知しました。ありがとうございます。
退会済みユーザー

退会済みユーザー

2021/06/06 11:59

#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桁までの出力はできましたが、その後、もっとも多く出現する数字とその出現回数を出力できません。コンパイラはできましたが、出力数値が違うものです。 引き続き、解決方法を教えてください。
guest

回答1

0

scanf("%d,&n);

文字列おかしいですよ

投稿2021/05/30 02:25

y_waiwai

総合スコア87793

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問