A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
Cnetuserさんへ。
fgetsを用いてファイルから文字列を読み込み、
最初と最後の文字列を入れ替えるという作業について、回答させていただきます。
前回の回答の
(1)に関して、ファイルに記述されているのは文字で、文字は1バイトのchar型データであるとします。
(2)に関して、一時保存用のchar tmpを作成します。
また、読み込み対象のファイルはCドライブにout.txtという名前で保存されている仮定し(プログラム中のC:\\out.txtに相当)、
中にはVWXYZという文字が文頭に記述されているとします。
すると以下のプログラムで目的の動作が果たせると思います。
int main( ) {
FILE *fp ;
char vc[ 6 ] ;
char tmp ;
fp = fopen( "C:\\out.txt", "r" ) ;
fgets( vc, 6, fp ) ;
tmp = vc[ 0 ] ;
vc[ 0 ] = vc[ 4 ] ;
vc[ 4 ] = tmp ;
printf( "%s", vc ) ;
return 0 ;
}
当然ですが、このプログラムも実用性や信頼性が皆無です。
問題点の発掘、改良はご自分で行っていただけると幸いです。
以上で言葉足らずですが、回答とさせていただきます。
No.4
- 回答日時:
> printf( "必ず入力はa~zの間で5文字行ってください : " ) ;
5文字入力するのであれば、終端の'\0'を含めて、
領域は6バイト必要だと思います。
No.3
- 回答日時:
C言語は慣れるまではなかなかソースや入門書を読んでも直感的に分かりづらいものですよね^^;
以下では配列で定義されたデータの概念は分かっていると仮定して話を進めさせていただきたいと思います。
C言語などのプログラムで数字や文字を入れ替える場合には次の二点を
守る事が基本的な考え方を身に着ける方法ではないかと思います。
(1)入れ替える対象が文字なのか数字なのかを考える
(2)入れ替え作業のためにデータの一時保存用の変数を確保する
です。
(1)に関して、今回の場合はおそらく文字で、一文字が1バイトのchar型データであると思われます。
(2)に関して、一文字がchar型のデータですから、データの一時保存用の変数をchar tmpとして作成しましょう。
そして、キーボードから入力された文字が保存される配列をchar vc[5];というデータであると仮定します。
すると,文字Vはvc[0]に、文字Zはvc[4]に保存されますから、次の3つの手順を踏んでデータの入れ替え作業を行います
(1)上で定義したtmpにvc[0]を一時保存する
(2)vc[0]にvc[4]を代入する
(3)vc[4]にtmpを代入する
以上の作業で0番目と4番目のデータの入れ替えが完了します。
もし、(2)の作業を最初にやってしまうと、vc[0]もvc[4]も同じ文字になってしまうので、入れ替える事が出来なくなりますね?
つまり、データの入れ替え作業では、入れ替えを行う前に、いったん入れ替え対象となるどちらかのデータを一時保存しておく必要があるということです。
以下には簡単に最初の文字と最後の文字を入れ替えるプログラムの例を示します。
int main( ) {
char vc[ 5 ] ;
char tmp ;
printf( "必ず入力はa~zの間で5文字行ってください : " ) ;
scanf( "%s", vc ) ;
tmp = vc[ 0 ] ; //(1)に相当
vc[ 0 ] = vc[ 4 ] ; //(2)に相当
vc[ 4 ] = tmp ; //(3)に相当
printf( "%s", vc ) ;
return 0 ;
}
ただし、上のプログラムは実用性や信頼性が皆無です。何がいけないのかは今後C言語についてたくさん勉強してご自分で考えていただけたら幸いです。
以上を言葉足らずですが回答とさせていただきます。
この回答への補足
くわしくありがとうございます。
なんとかうごかすことができました。
ずうずうしいとは思いますが。scanfを使わずfgetsでやる
方法はどうすればいいのでしょうか?よろしくおねがいします。
No.2
- 回答日時:
1 char x;
char y;
の互いの内容を入れ替えるコードは書けますか?
2 同様に char str[5];
があるとき、str[0] と str[3] を入れ替えるコードは書けますか?
3 [2]ができるなら簡単ですね、str[0]とstr[末端のインデクス]
を入れ替えてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C#の問題です。 文字列型の配列 s[100] にキーボードから入力された100文字以内の文字列(単 2 2022/06/22 15:18
- Word(ワード) Windows11キーボードの調子が悪いので治し方を教えてください。 【症状】 1つ目 キーボードの 5 2022/07/03 14:51
- その他(ソフトウェア) ジャストシステムのATOKについて 1 2023/03/18 14:24
- マウス・キーボード chromebook キーボードについて 1 2022/10/16 13:29
- Excel(エクセル) セルに入力した小文字アルファベット、数字を大文字表示させるには? 3 2022/07/13 10:01
- Excel(エクセル) Excelの列から検索して該当する行を別シートに転記するVBA 2 2022/12/20 09:35
- Visual Basic(VBA) Excel VBA 教えてください。 VBA初心者です。 詳しい方がいましたら教えてください。 下記 3 2023/04/25 11:22
- その他(パソコン・周辺機器) WINDOWS11 IMEの日本語入力で困っています 4 2023/04/29 19:24
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
- Excel(エクセル) エクセルのマクロを教えてください。 1 2022/03/30 09:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sscanfとscanfの違いがよくわか...
-
CStringのFindで文字列検索を行...
-
Cで「大文字、小文字の判定」は...
-
反転した数値を表示させるやり方
-
fgets関数を使用したときの文字...
-
C言語 strlen 再入力を促す
-
1行の文字列を時間差で表示する...
-
strstrを利用しない文字列検索...
-
教えていただけませんか?C言語...
-
ある文字列で2回目3回目に出現...
-
2進数から10進数へ変換プログラム
-
C言語 空白の行(改行のみ)が...
-
C言語のステップ数をカウントす...
-
itoaわかりません
-
ブランクのチェック
-
10進数文字列の変換
-
[Java]文字列分割
-
C言語で16進数文字列から16進数...
-
fgetsで拾われる改行文字を削除...
-
Enterキーを押されたら次の処理...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CStringのFindで文字列検索を行...
-
sscanfとscanfの違いがよくわか...
-
反転した数値を表示させるやり方
-
fgets関数を使用したときの文字...
-
C言語 空白の行(改行のみ)が...
-
charと%c , %s の関係について
-
C言語のステップ数をカウントす...
-
fgetsで拾われる改行文字を削除...
-
itoaわかりません
-
C言語で16進数文字列から16進数...
-
strstrを利用しない文字列検索...
-
文字列中に含まれる文字の個数...
-
Cで「大文字、小文字の判定」は...
-
エディットボックスに入力され...
-
1行の文字列を時間差で表示する...
-
文字列の途中に「0」がある場...
-
[Java]文字列分割
-
教えていただけませんか?C言語...
-
atoiでの文字列以外のエラー処...
-
ブランクのチェック
おすすめ情報