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

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

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

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

Q&A

解決済

1回答

544閲覧

C言語での配列の書き方

yuto_jake

総合スコア42

C

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

0グッド

0クリップ

投稿2022/06/01 11:00

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

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

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

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

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

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

episteme

2022/06/01 11:15 編集

配列の使い方 はどんなショボい教本でも必ず書かれているはずですが。なにがわからんのですか?
yuto_jake

2022/06/01 11:27

epistemeさん、ご連絡ありがとうございます。 配列の使い方はあらかた理解していると思っております。しかし今回書こうと思っているコードでは分からなかった点は、printfで入力を受け取った文字または数値を、arrayに入れるコードの書き方が分からなかったため、質問させていただきまた。
BeatStar

2022/06/01 11:47

(本当に分かっているのかな…?) そもそもprintf関数は「標準出力」、つまりコンソールに文字や数字等を表示するためのものです。 scanf関数では? コードが提示されているからわからんでもないけど、文章だけで提示されていたら意味不明になってしまいますよ。定義が違うから。足し算をしているのに「引き算がわからないのです」というぐらい前提が滅茶苦茶。 それと「関数」の項目があるはずです。入門書やサイトに。そこも読んでみましょう。 [質問者さんに必要そうなもの] ■ 配列 ■ 関数 ■ 引数/仮引数 ■ 戻り値
episteme

2022/06/01 12:34

↑■ 構造体 を追加。
episteme

2022/06/01 13:21 編集

「受け取った文字または数値を、arrayに入れるコードの書き方が分からなかった」 なら 「配列の使い方はあらかた理解していると思って」いけないのでは? だって使えてないんだもん。
yuto_jake

2022/06/01 13:32

おっしゃる通りですね。ご教授どうもありがとうございました。
FiroProchainezo

2022/06/01 14:16

int main()からmenuを呼んでselectionに入れてるように見えますが、menuで宣言したoptionはmainで使えましたっけ?
guest

回答1

0

ベストアンサー

質問者さんのいまの力量だと「昇順降順に並べられるように配列を使いたい」まで行くのはけっこう長い道のりです。頑張ってください。

まずは、タスク1つ(名前・締切・進捗・カテゴリーのデータの組み)を構造体で表現するように変更してください。
次に、もし扱えるタスクの数の上限が決まっていてもいいなら、その構造体の配列をグローバル変数にでも用意して、data.txt から読み書きできるようにしましょう。もし上限を決めたくないなら malloc() realloc() free() などで動的メモリ確保することを習得する必要があります。

投稿2022/06/01 23:51

int32_t

総合スコア20874

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

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

yuto_jake

2022/06/02 03:05

int32_tさん、ご回答及びご説明ありがとうございます。 ご教授いただいた通り、タスク1つをを構造体で表現するように変更してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問