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

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

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

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

解決済

C言語で特定のファイルのみ表示したい

yuto_jake
yuto_jake

総合スコア40

C

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

1回答

-2評価

0クリップ

241閲覧

投稿2022/05/16 07:27

編集2022/05/21 18:50

C言語で、タスク情報を記録できるシステムを作成しています。addtaskで作成したtxtファイルをviewtaskのコードを使って日付ごとに表示させたいのですが、現在書いているコードだとすべてのタスクが表示されてします。日付ごと(特定のファイルのみ)を表示させるにはどのようにしたらよいでしょうか?以下にソースコードをupしますので、ご教授よろしくお願いいたします。

c

#include<stdio.h> #include<stdlib.h> #include<conio.h> #include<string.h> void addtask(); void viewtask(); void edittask(); void deletetask(); struct task { char time[8]; char name[50]; char status[100]; char category[100]; char note[2000]; } ; int main() //2,3のひょうじができない  { int ch; printf("\n\n\t---------------------------------\n"); printf("\t---------------------------------"); while(1) { printf("\n\n\t\tMain Menu:"); printf("\n\n\tAdd Task\t[1]"); printf("\n\tView Task\t[2]"); printf("\n\tEdit Task\t[3]"); printf("\n\tDelete Task\t[4]"); printf("\n\tExit\t\t[5]"); printf("\n\n\tEnter your choice:"); scanf("%d",&ch); switch(ch) { case 1: addtask(); break; case 2: viewtask(); break; default: printf("\nYou entered wrong choice..."); printf("\nPress any key to try again"); getch(); break; } system("cls"); } return 0; } void addtask( ) { system("cls"); FILE *fp ; char another = 'Y' ,time[10]; struct task e ; char filename[15]; int choice; printf("\n\n\t\t---------------------------------\n"); printf("\t\t* Welcome to Add Task Menu! *"); printf("\n\t\t---------------------------------\n\n"); printf("Enter Task due date:[yyyy-mm-dd]:"); fflush(stdin); gets(filename); fp = fopen (filename, "ab+" ) ; if ( fp == NULL ) { fp=fopen(filename,"w"); if(fp==NULL) { printf("\nSystem Error..."); printf("\nPress any key to exit"); getch(); return ; } } while ( another == 'Y'|| another=='y' ) { choice=0; fflush(stdin); printf ( "\n\tEnter Task due date again:[yyyy-mm-dd]:"); scanf("%s",time); rewind(fp); while(fread(&e,sizeof(e),1,fp)==1) { if(strcmp(e.time,time)==0) { printf("\n\tThe Task already exists.\n"); choice=1; } } if(choice==0) { memset(&e,0x00,sizeof(e)); strcpy(e.time,time); printf("\tEnter Task name:"); fflush(stdin); gets(e.name); fflush(stdin); printf("\tEnter status:"); gets(e.status); fflush(stdin); printf("\tEnter category:"); gets(e.category); fflush(stdin); printf("\tNote:"); gets(e.note); fwrite ( &e, sizeof ( e ), 1, fp ) ; printf("\nYour Task is just added!\n"); } printf ( "\n\tWant to add another Task?(Y/N) " ) ; fflush ( stdin ) ; another = getchar( ) ; } fclose ( fp ) ; printf("\n\n\tPress any key to exit..."); getch(); } void viewtask( ) { FILE *fp ; system("cls"); struct task customer ; char time[8],choice,filename[14]; int ch; printf("\n\n\t\t---------------------------------\n"); printf("\t\t* Welcome to the Viewing Task Menu *"); printf("\n\t\t---------------------------------\n"); if(choice!=0) { return ; } do { printf("\n\tEnter the due date of task to view:[yyyy-mm-dd]:"); fflush(stdin); gets(filename); fp = fopen ( filename, "rb" ) ; if ( fp == NULL ) { puts ( "\nThe task does not exist...\n" ) ; printf("Press any key to exit"); getch(); return ; } system("cls"); printf("\n\tHow would you like to view:\n"); printf("\n\t1.Whole task of the day."); printf("\n\t\tEnter your choice:"); scanf("%d",&ch); switch(ch) { case 1: printf("\nThe overall task for %s is:",filename); while ( fread ( &customer, sizeof ( customer ), 1, fp ) == 1 ) { printf("\n"); printf("\nTask due date is: %s",customer.time); printf("\nStatus is: %s",customer.status); printf("\nCategory is: %s",customer.category); printf("\nNote: %s",customer.note); printf("\n"); } break; default: printf("\nYout typed wrong choice...\n"); break; } printf("\n\nWould you like to continue viewing Task?(Y/N):"); fflush(stdin); scanf("%c",&choice); } while(choice=='Y'||choice=='y'); fclose ( fp ) ; return ; }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

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

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

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

jimbe

2022/05/16 07:45

> 現在書いているコードだとすべてのタスクが表示されてします。 main 関数がありませんので、何がどのようになっているのか確認できません。 main関数をご提示頂くとともに、どのように実行・操作したらどのようなファイルが作成されその中身がどうなっていて、さらに「日付ごと(特定のファイルのみ)を表示させ」ようとした操作とその結果をご提示ください。
yuto_jake

2022/05/16 07:57

jimbeさん、コメントありがとうございます。 >main 関数がありませんので、何がどのようになっているのか確認できません。 main関数をご提示頂くとともに、どのように実行・操作したらどのようなファイルが作成されその中身がどうなっていて、さらに「日付ごと(特定のファイルのみ)を表示させ」ようとした操作とその結果をご提示ください →失礼いたしました。main関数の表記および、ファイルに関する実行・操作した結果を記載させていただきます。 何卒宜しくお願い致します。
yuto_jake

2022/05/16 08:09

jimbeさん、失礼いたしました。 わたしの勘違いで自分自身で問題点を修正することができました。 コメントおよびコードの表記に関する注意点のご教授ありがとうございました。
y_waiwai

2022/05/16 09:37

修正手順、解決法などを自己回答として、解決済としてしまいましょう

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

C

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