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

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

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

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

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

0回答

390閲覧

C言語 線形リストを用いた駅表示プログラム

zx_s

総合スコア10

C

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

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

1クリップ

投稿2018/12/25 11:38

前提・実現C言語に関する質問です。とある線の駅を表示する線形リストのプログラムを作成しました。

表示はすることができて駅の追加も削除もできるようにはなりました。
ですが、駅名を外部ファイルに保存して動くプログラムに変更したいです。具体的な手順としては以下の通りです。

1. プログラム起動時にファイルからデータを読み込んで画面に表示する

2. 以下の選択肢を表示して選択させ、選択に従って実行する。
・駅を追加して、結果を表示して、選択肢に戻る
・駅を削除して、結果を表示して、選択肢に戻る
・プログラムを終了する

3.プログラムを終了するとデータファイルに書き出して終了する。

この3段階です。なお、カレントディレクトリにdata.csvというファイルが用意されていると想定されていて、カンマ区切りでデータが記録されている状態を想定します。

ーーー以下はコードーーー

#include <stdlib.h>
#include <string.h>
struct station{
char name[100];
char rapid;
struct station *next;
};

void showlist(struct station *sp){//spは先頭番地よ
while((sp = sp->next)!= NULL){//spがNULL(終点)になるまで繰り返す
printf("station: %s,\trapid: %c\n", sp->name, sp->rapid);
}
}
char addstation(struct station *sp){
struct station *new;
char query_name[100];
new = (struct station *)malloc(sizeof(struct station));
printf("Insert after?: ");
scanf ("%s", query_name);
printf("Input name of new station: ");
scanf ("%s", new->name);
printf("rapid (y/n): ");
scanf ("%*c%c", &new->rapid);

//追加の作業
while(sp != NULL){//駅名の探索
if(strcmp(sp->name, query_name) == 0){
new->next = sp->next;
sp->next = new;
break;
}else{
sp = sp->next;
}
}

if(sp == NULL){//breakを踏まずにきたら,stop = NULL
printf("The station %s does not exist.\n", query_name);
exit(1);
}
}

void deletestation(struct station *sp){
char query_name[100];
struct station *tmp;
tmp = sp;
printf("Name of delete station: ");
scanf ("%s", query_name);
while(sp != NULL){
if(strcmp(sp->name, query_name) != 0){//一致しなければ続ける
tmp = sp;//今停車している駅の情報をtmpに一時保管
sp = sp->next;
}else{//名前が一致した場合
break;//ループを抜ける--> tmpの中には,1つ前の駅の情報が入っている
}
}
tmp->next = sp->next;//繋ぎかえ
}

int main(void){
struct station st0, st1, st2, st3, st4,dummy, *stop;
int flag;

dummy = (struct station){"特殊な文字列",'\0',&st0};
st0 = (struct station){"hachioji", 'y', &st1};
st1 = (struct station){"katakura", 'y', &st2};
st2 = (struct station){"aihara", 'y', &st3};
st3 = (struct station){"hashimoto", 'y', &st4};
st4 = (struct station){"sagamihara", 'y', NULL};

stop = &st0;//始発の駅のポインタ(先頭番地)をstopに代入

for(;;){//無限ループ
printf("1: add station\n 2: delete station\n 3: list\n 4: quit\n");
scanf ("%d", &flag);
switch(flag){
case 1:
printf("=== add station ===\n");
addstation(&dummy);
break;
case 2:
printf("=== delete station ===\n");
deletestation(&dummy);
break;
case 3:
printf("=== show list ===\n");
showlist(&dummy);
break;
case 4:
printf("=== quit ===");
printf("save to file hogehoge\n");
return 0;
default:
printf("select number 1 to 4\n");
break;
}
}
/* printf("=== before ===\n"); /
/
showlist(stop); */

/* // stop = &st0; /
/
addstation(&st0); */

/* stop = &st0;//始発駅にstopを移動 /
/
printf("=== after ===\n"); /
/
showlist(stop); */

return 0;
}

ーーー以上はコードーーー

よろしくお願いします

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

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

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

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

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

y_waiwai

2018/12/25 11:42

このままではコードが見づらいので、質門を編集し、<code>ボタン、でてきた’’’の枠の中にコードを貼り付けてください
退会済みユーザー

退会済みユーザー

2018/12/25 12:36

どの点で困っているのでしょうか?
can110

2018/12/25 16:05

インデントがなくコードが読みづらいです。回答得られにくくなります。
yukkuri

2018/12/26 02:06

なぜC#とC両方ついているのでしょうか。C#の要素が見られません。タグを編集してCだけにしてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問