C言語を使用して、タスク情報を記録できるシステムを作成しています。addtaskで受け取った情報をソース分けして昇順降順に並べられるように配列を使いたいのですが、当方初心者なため手当たり次第情報を探しているのですが一向に理解できない状態です。。
以下にソースコードをupしますので、arrayのコードの書き方方法をご教授いただけますと幸いです。
c
1#include <stdio.h> 2#include <stdlib.h> 3 4void addtask(); 5void deletetask(); 6void viewtask(); 7void edittask(); 8char menu(); 9 10int main() 11{ 12 char selection; 13 do 14 { 15 selection = menu(); 16 switch(selection) 17 { 18 case '1': addtask(); 19 break; 20 case '2': viewtask(); 21 break; 22 case '3': edittask(); 23 break; 24 case '4': deletetask(); 25 break; 26 case '5': printf("\nThank you for using Task manager!!^^"); 27 exit(0); 28 default: 29 printf("\nYou entered wrong choice..."); 30 printf("\nPress any key to try again"); 31 break; 32 } 33 } 34 while(selection != '9'); 35 return 0; 36} 37 38char menu() 39{ 40 printf("\n\n\nWelcome to Task Management System!"); 41 printf("\nThis is Main Menu"); 42 char option; 43 printf("\n1) Add New Task"); 44 printf("\n2) Check your Task"); 45 printf("\n3) Edit your Task"); 46 printf("\n4) Delete your Task"); 47 printf("\n5) Exit"); 48 printf("\nEnter your choice:"); 49 scanf("%c[^\n]", &option); 50 return option; 51} 52 53void addtask() 54{ 55 int duedate, p; 56 char tsn[50]; 57 char cat[20]; 58 printf("\n***** This is add new Task *****"); 59 FILE * f = fopen("data.txt", "r+"); 60 if(f == NULL) 61 f = fopen("data.txt", "w"); 62 else 63 { 64 fseek(f, 0, SEEK_END); 65 printf("\nEnter your Task name:"); 66 scanf("%s", tsn); 67 printf("\nEnter your Task due date[ex:31052022]:"); 68 scanf("%d", &duedate); 69 printf("\nEnter your Task progression[0~100]:"); 70 scanf("%d", &p); 71 printf("\nEnter Task category:"); 72 scanf("%s", cat); 73 fprintf(f,"%s %d %d %s\n", tsn, duedate, p, cat); 74 printf("\nYour task is just added successfully!"); 75 } 76 fclose(f); 77} 78 79void viewtask(){ //ソート降順昇順 80 int duedate, p; 81 char tsn[50]; 82 char cat[20]; 83 printf("\n***** Viewing Task Menu *****"); 84 printf("\nThis is your task >>"); 85 FILE * f = fopen("data.txt", "r"); 86 while(fscanf(f,"%s",&tsn) != EOF){ 87 fscanf(f,"%d", &duedate); 88 fscanf(f,"%d",&p); 89 fscanf(f,"%s",&cat); 90 printf("\n Task name: %s \t Task due date: %d \t Task progression: %d \t Task category: %s",tsn, duedate, p, cat); 91 } 92 fclose(f); 93} 94 95void edittask() 96{ 97 char tsn[50]; 98 char ntsn[50]; 99 char cat[20]; 100 int p, duedate; 101 FILE * f = fopen("data.txt", "r"); 102 FILE * ft = fopen("ndata.txt", "w"); 103 printf("\n***** This is Edit your Task *****"); 104 printf("\nEnter the name of the Task you want to edit:"); 105 scanf("%s", &ntsn); 106 while(fscanf(f,"%s",&tsn) != EOF) 107 { 108 fscanf(f,"%d", &duedate); 109 fscanf(f,"%d",&p); 110 fscanf(f,"%s",&cat); 111 if (strcmp(tsn, ntsn) == 0) 112 { 113 printf("\nUpdating::: Task name: %s \t Task due date: %d \t Progression: %d \t Task category: %s",tsn, duedate, p, cat); 114 printf("\nEnter new Task name:"); 115 scanf("%s", &tsn); 116 printf("\nEnter new due date:"); 117 scanf("%d", &duedate); 118 printf("\nEnter new Progression[0.00~100]:"); 119 scanf("%d", &p); 120 printf("\n\nEnter new Task category:"); 121 scanf("%s", &cat); 122 printf("\nYour task is edited now!"); 123 } 124 else 125 { 126 printf("The Task does not exist"); 127 } 128 129 fprintf(ft,"%s %d %d %s\n", tsn, duedate, p, cat); 130 } 131 fclose(ft); 132 fclose(f); 133 remove("data.txt"); 134 rename("ndata.txt", "data.txt"); 135} 136 137void deletetask() 138{ 139 char tsn[50]; 140 char ntsn[50]; 141 char cat[20]; 142 int p, duedate; 143 FILE * f = fopen("data.txt", "r"); 144 FILE * ft = fopen("ndata.txt", "w"); 145 printf("\n***** This is delete task *****"); 146 printf("\nEnter Task name which you want to delete:"); 147 scanf("%s", &ntsn); 148 while(fscanf(f,"%s",&tsn) != EOF) 149 { 150 fscanf(f,"%d", &duedate); 151 fscanf(f,"%d",&p); 152 fscanf(f,"%s",&cat); 153 if (strcmp(tsn, ntsn) == 0) 154 { 155 printf("\nDelete >> Task name: %s \t Task due date: %d \t Progression: %d \t Task category: %s",tsn, duedate, p, cat); 156 printf("\nThe task is just deleted!"); 157 continue; 158 } 159 160 else 161 { 162 printf("The Task does not exist"); 163 } 164 fprintf(ft,"%s %d %d ca\n", tsn, duedate, p, cat); 165 } 166 fclose(ft); 167 fclose(f); 168 remove("data.txt"); 169 rename("ndata.txt", "data.txt"); 170} 171
配列の使い方 はどんなショボい教本でも必ず書かれているはずですが。なにがわからんのですか?
epistemeさん、ご連絡ありがとうございます。
配列の使い方はあらかた理解していると思っております。しかし今回書こうと思っているコードでは分からなかった点は、printfで入力を受け取った文字または数値を、arrayに入れるコードの書き方が分からなかったため、質問させていただきまた。
(本当に分かっているのかな…?)
そもそもprintf関数は「標準出力」、つまりコンソールに文字や数字等を表示するためのものです。
scanf関数では?
コードが提示されているからわからんでもないけど、文章だけで提示されていたら意味不明になってしまいますよ。定義が違うから。足し算をしているのに「引き算がわからないのです」というぐらい前提が滅茶苦茶。
それと「関数」の項目があるはずです。入門書やサイトに。そこも読んでみましょう。
[質問者さんに必要そうなもの]
■ 配列
■ 関数
■ 引数/仮引数
■ 戻り値
↑■ 構造体
を追加。
「受け取った文字または数値を、arrayに入れるコードの書き方が分からなかった」
なら
「配列の使い方はあらかた理解していると思って」いけないのでは? だって使えてないんだもん。
おっしゃる通りですね。ご教授どうもありがとうございました。
int main()からmenuを呼んでselectionに入れてるように見えますが、menuで宣言したoptionはmainで使えましたっけ?

回答1件
あなたの回答
tips
プレビュー