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

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

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

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

Q&A

解決済

1回答

620閲覧

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

yuto_jake

総合スコア42

C

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

0グッド

0クリップ

投稿2022/05/16 07:27

編集2022/05/16 08:06

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

c

1#include<stdio.h> 2 3#include<stdlib.h> 4 5#include<conio.h> 6 7#include<string.h> 8 9 10void addtask(); 11 12void viewtask(); 13 14void edittask(); 15 16void deletetask(); 17 18struct task 19 20{ 21 22 char time[8]; 23 24 char name[50]; 25 26 char status[100]; 27 28 char category[100]; 29 30 char note[2000]; 31 32} ; 33 34int main() //2,3のひょうじができない  35 36{ 37 38 int ch; 39 40 printf("\n\n\t---------------------------------\n"); 41 42 43 44 printf("\t---------------------------------"); 45 46 while(1) 47 48 { 49 50 printf("\n\n\t\tMain Menu:"); 51 52 printf("\n\n\tAdd Task\t[1]"); 53 54 printf("\n\tView Task\t[2]"); 55 56 printf("\n\tEdit Task\t[3]"); 57 58 printf("\n\tDelete Task\t[4]"); 59 60 printf("\n\tExit\t\t[5]"); 61 62 printf("\n\n\tEnter your choice:"); 63 64 scanf("%d",&ch); 65 66 switch(ch) 67 68 { 69 70 case 1: 71 72 addtask(); 73 74 break; 75 76 case 2: 77 78 viewtask(); 79 80 break; 81 82 default: 83 84 printf("\nYou entered wrong choice..."); 85 86 printf("\nPress any key to try again"); 87 88 getch(); 89 90 break; 91 92 } 93 94 system("cls"); 95 96 } 97 98 return 0; 99 100} 101void addtask( ) 102{ 103 system("cls"); 104 FILE *fp ; 105 char another = 'Y' ,time[10]; 106 struct task e ; 107 char filename[15]; 108 int choice; 109 printf("\n\n\t\t---------------------------------\n"); 110 printf("\t\t* Welcome to Add Task Menu! *"); 111 printf("\n\t\t---------------------------------\n\n"); 112 printf("Enter Task due date:[yyyy-mm-dd]:"); 113 fflush(stdin); 114 gets(filename); 115 fp = fopen (filename, "ab+" ) ; 116 if ( fp == NULL ) 117 { 118 fp=fopen(filename,"w"); 119 if(fp==NULL) 120 { 121 printf("\nSystem Error..."); 122 printf("\nPress any key to exit"); 123 getch(); 124 return ; 125 } 126 } 127 while ( another == 'Y'|| another=='y' ) 128 { 129 choice=0; 130 fflush(stdin); 131 printf ( "\n\tEnter Task due date again:[yyyy-mm-dd]:"); 132 scanf("%s",time); 133 rewind(fp); 134 while(fread(&e,sizeof(e),1,fp)==1) 135 { 136 if(strcmp(e.time,time)==0) 137 { 138 printf("\n\tThe Task already exists.\n"); 139 choice=1; 140 } 141 } 142 if(choice==0) 143 { 144 memset(&e,0x00,sizeof(e)); 145 strcpy(e.time,time); 146 printf("\tEnter Task name:"); 147 fflush(stdin); 148 gets(e.name); 149 fflush(stdin); 150 printf("\tEnter status:"); 151 gets(e.status); 152 fflush(stdin); 153 printf("\tEnter category:"); 154 gets(e.category); 155 fflush(stdin); 156 printf("\tNote:"); 157 gets(e.note); 158 fwrite ( &e, sizeof ( e ), 1, fp ) ; 159 printf("\nYour Task is just added!\n"); 160 } 161 printf ( "\n\tWant to add another Task?(Y/N) " ) ; 162 fflush ( stdin ) ; 163 another = getchar( ) ; 164 } 165 fclose ( fp ) ; 166 printf("\n\n\tPress any key to exit..."); 167 getch(); 168} 169 170void viewtask( ) 171 172{ 173 174 FILE *fp ; 175 176 system("cls"); 177 178 struct task customer ; 179 180 char time[8],choice,filename[14]; 181 182 int ch; 183 184 printf("\n\n\t\t---------------------------------\n"); 185 186 printf("\t\t* Welcome to the Viewing Task Menu *"); 187 188 printf("\n\t\t---------------------------------\n"); 189 190 191 192 if(choice!=0) 193 194 { 195 196 return ; 197 198 } 199 200 do 201 202 { 203 204 printf("\n\tEnter the due date of task to view:[yyyy-mm-dd]:"); 205 206 fflush(stdin); 207 208 gets(filename); 209 210 fp = fopen ( filename, "rb" ) ; 211 212 if ( fp == NULL ) 213 214 { 215 216 puts ( "\nThe task does not exist...\n" ) ; 217 218 printf("Press any key to exit"); 219 220 getch(); 221 222 return ; 223 224 } 225 226 system("cls"); 227 228 printf("\n\tHow would you like to view:\n"); 229 230 printf("\n\t1.Whole task of the day."); 231 232 printf("\n\t\tEnter your choice:"); 233 234 scanf("%d",&ch); 235 236 switch(ch) 237 238 { 239 240 case 1: 241 242 printf("\nThe overall task for %s is:",filename); 243 244 while ( fread ( &customer, sizeof ( customer ), 1, fp ) == 1 ) 245 246 { 247 248 printf("\n"); 249 250 printf("\nTask due date is: %s",customer.time); 251 252 printf("\nStatus is: %s",customer.status); 253 254 printf("\nCategory is: %s",customer.category); 255 256 printf("\nNote: %s",customer.note); 257 258 printf("\n"); 259 260 } 261 262 break; 263 264 265 default: 266 printf("\nYout typed wrong choice...\n"); 267 268 break; 269 270 } 271 272 printf("\n\nWould you like to continue viewing Task?(Y/N):"); 273 274 fflush(stdin); 275 276 scanf("%c",&choice); 277 278 } 279 while(choice=='Y'||choice=='y'); 280 281 fclose ( fp ) ; 282 283 return ; 284 285}

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

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

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

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

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

jimbe

2022/05/16 07:45

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

2022/05/16 07:57

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

2022/05/16 09:37

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

回答1

0

自己解決

void viewtask( )
{

char ch;

FILE *fp;

fp = fopen("task.txt", "r");

if( fp == NULL ) {
perror("ファイルの読み込みに失敗!\n");
}

printf("your all tasks are\n");
while( ( ch = fgetc(fp) ) != EOF ) {
printf("%c", ch);
}
printf ( "\n\tWant to add another Task?(Y/N) " ) ;
fflush ( stdin ) ;
getchar( ) ;
fclose(fp);

}

投稿2022/05/21 09:50

yuto_jake

総合スコア42

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問