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

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

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

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

Q&A

受付中

ファイルの入出力について教えてください

sho888
sho888

総合スコア10

C

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

2回答

0グッド

0クリップ

410閲覧

投稿2022/11/08 23:12

前提

実現したいこと

入試結果から,合格者の受験番号を受験番号順に出力するプログラムを作成せよ.

キーボードから,入試結果が記されたファイル名を入力する.

ファイルの内容例を以下に示す.ファイルの各行には「受験番号」,「国語の点数」,「社会の点数」,「数学の点数」,「理科の点数」,「英語の点数」がカンマ区切りで記載されている.このように,カンマで複数の項目が区切られたファイルをCSV(Comma Separeted Values)ファイルと呼ぶ.受験番号は英数字5文字,各科目の点数は3桁で記載されており 0 から 100 の範囲をとる.

A0001,068,074,059,088,065
A0002,074,055,091,088,069
A0003,088,080,079,082,095
A0004,094,088,056,065,055
出力は,すべての合格者の受験番号とする.「5教科の合計点数が350点以上」「理系2科目(数学,理科)の合計点数が160点以上」の両方の条件を満たす受験者を合格とすること.

なお,すべてのテストケースにおいて,最低1名は合格者が含まれているものと仮定して良い.また,入試結果は受験番号順にソート(昇順)されている.

実行例1]
[入力ファイル]
exam01.txt → A0001,068,074,059,088,065
A0002,074,055,091,088,069
A0003,088,080,081,082,095
A0004,094,088,056,065,055
[入力] → [出力]
exam01.txt → A0002
A0003

この

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。この課題を教えてください!!お願いします

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2022/11/16 00:57

こちらの質問が複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました。

episteme

2022/11/08 23:33

何を教えてほしいんですか?
pig_vba

2022/11/09 00:24

最低限自分で書けるところまでコード書いて調べてもわからなかったところ明確にしてから出直してきてください。としか言えないですね。
1T2R3M4

2022/11/09 00:45

これとか読んでいないのでしょうか。理解できなかったのかな。 https://teratail.com/help/avoid-asking コードをください・デバッグしてください等の丸投げの質問 何かを作りたいのでコードを書いてほしい、学校の課題を解いてほしい等の質問は、具体的にプログラミングで困っている質問ではないと考え、推奨していません。 問題や質問は実際に調査や作業に取り組み、具体的なところで生まれると考えるためです。 まずは実際に作業に取り組み、つまづいたところで投稿をしてみてください。
dodox86

2022/11/09 02:18

あらゆる指摘、助言をスルーし、じっと黙って動くコード付き回答を待つスタイル、ですね。
jimbe

2022/11/09 02:45

こういう課題て期限はどれ位先なもんなんでしょう。
fana

2022/11/09 05:05

> ファイルの入出力について教えてください というタイトルですが,出力側に関してはファイルに出せとは言われていないように見える.

回答2

1

残念ながら、ここではコードの作成依頼は受け付けていません

まずはあなたなりにコードを書いてみましょう。その上でわからないことを聞いていただければお答えできるかと思います。

投稿2022/11/09 00:06

y_waiwai

総合スコア86066

ardin👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

2022/11/14 14:07

こちらの回答が複数のユーザーから「質問に対する回答となっていない投稿」という指摘を受けました。

0

この手の ザ・課題 なやつでは,「入力ファイルの中身が話と違う」みたいなイレギュラーを全く考えなくて良いのでしょうから(ですよね?),各データの行内での位置が全て既知であるものとして淡々と処理すればよいのではないでしょうか.

例えば,【「国語の点数」は行内で7文字目から始まる】ということが分かっているのですから,「カンマがどうの~」とかいう与太話は全くどうでもよく,真面目に考慮する必要はありません.「国語の点数」相当の箇所が欲しいならば単に7文字目から3文字分を使えば良いわけです.

C

1//※関数名がてきとーな文字列になっているので,何かいい感じの名前に改名してあげてください. 2 3int Meow( char c ) 4{ 5 const char Cs[] = "0123456789"; 6 for( int i=0; i<10; ++i ) 7 { 8 if( Cs[i]==c )return i; 9 } 10 return 0; 11} 12 13void Kitten( int *v, const char *p ) 14{ 15 *v += 10*( 10*Meow(*p) + Meow(*(p+1)) ) + Meow(*(p+2)); 16} 17 18int main(void) 19{ 20 char Buff[30] = { 0 }; 21 FILE *fp = fopen( "Input.txt", "r" ); //※入力ファイル名はここではハードコーディングしている 22 if( fp==NULL )return 0; 23 24 while( fgets( Buff, 29, fp ) ) //※ 29 はてきとー.イレギュラーがあり得ないならこの値でもよいハズ 25 { 26 int s = 0; 27 Kitten( &s, Buff+14 ); 28 Kitten( &s, Buff+18 ); 29 if( s < 160 )continue; 30 Kitten( &s, Buff+6 ); 31 Kitten( &s, Buff+10 ); 32 Kitten( &s, Buff+22 ); 33 if( s < 350 )continue; 34 Buff[5] = '\0'; 35 printf( "%s\n", Buff ); 36 } 37 38 fclose( fp ); 39 return 0; 40}

なお,

キーボードから,入試結果が記されたファイル名を入力する

のところは主題ではない(:方法論に関係しない)事柄なので入れていません.そこは自身で補ってください.


[追記]
↑のコードだと while 内の記述がなんか野暮ったいので,こんな感じにした方がすっきりして良いかも?

C

1//この関数で v を返すようにして… 2int *Kitten( int *v, const char *p ) 3{ 4 *v += 10*( 10*Meow(*p) + Meow(*(p+1)) ) + Meow(*(p+2)); 5 return v; 6} 7 8// 9int main( void ) 10{ 11 //...(略) 12 while( fgets( Buff, 29, fp ) ) 13 {//while 内での関数呼び出し箇所をこんな感じに変更. 14 int s = 0; 15 if( *Kitten( Kitten( &s, Buff+14 ), Buff+18 ) < 160 )continue; 16 if( *Kitten( Kitten( Kitten( &s, Buff+6 ), Buff+10 ), Buff+22 ) < 350 )continue; 17 18 Buff[5] = '\0'; 19 printf( "%s\n", Buff ); 20 } 21 //...(略) 22}

投稿2022/11/09 04:45

編集2022/11/09 04:58
fana

総合スコア10674

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

fana

2022/11/09 05:07 編集

回答に際しては,問題文中に唐突に差し挟まれている > このように,カンマで複数の項目が区切られたファイルをCSV(Comma Separeted Values)ファイルと呼ぶ. という一文については,単に「こういうのを世間ではCSVって呼ぶよ」というオフトピックな話なのであって,「この課題の入力ファイル内の記述が 一般的にCSVと呼べる範疇での自由度を有し得る」というような話ではない,と捉えた. すなわち,空行があったり,文字列がダブルクォートで囲まれたり,行内のてきとーな位置にスペースが入ったり等々のようなことはあり得ないものと判断した.

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

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

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

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C

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