
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
大人のためのおしりトラブル座談会【PR】
おしりの悩みといえば、痔を思い浮かべる方も多いのではないでしょうか。今回は、おしりトラブルに悩む女性3人が集まり座談会を開催しました。
-
文字列のswap
C言語・C++・C#
-
charと%c , %s の関係について
C言語・C++・C#
-
配列の中身を入れ替える方法を教えてください
C言語・C++・C#
-
4
float型とdouble型の変数の違いを教えてほしいです
C言語・C++・C#
-
5
%P と %X の違い
C言語・C++・C#
-
6
複数桁10進数の*桁目だけを抽出したい
C言語・C++・C#
-
7
scanf(%s", buf);でスペースを含んだ文字"
C言語・C++・C#
-
8
文字列中に含まれる文字の個数をカウントするプログラムについて…
C言語・C++・C#
-
9
数字以外が入力されたらエラー文を出したい。
C言語・C++・C#
-
10
stdin,stdoutについて
C言語・C++・C#
-
11
至急!C言語文字列置換
C言語・C++・C#
-
12
ポインタを使って関数の値のやり取り
C言語・C++・C#
-
13
文字列の反転
C言語・C++・C#
-
14
*をユーザーが入力した数字の数だけ表示するプログラムの作り方を教えてください
C言語・C++・C#
-
15
C言語で文字列の中の文字列のカウント
C言語・C++・C#
-
16
セグメンテーション違反
C言語・C++・C#
-
17
英単語をアルファベット順に
C言語・C++・C#
-
18
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
19
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
20
【C言語】ファイルを読み込んで16進数で表示する
C言語・C++・C#
関連するQ&A
- 1 C言語初心者で早速詰まってしまいました。 C言語の計算についてでちょっと良く分からないです… #in
- 2 C言語 文字を入力させて 入力された数字の絶対値を表示するプログラムを作りなさい。 よくわかりません
- 3 c:\プロジェクト別\c言語\c-master\kadai22\main.c(1) : fatal error C1083: include ファイルを開けませ
- 4 C言語初心者で独学をしています。 ネットで調べながらやっているのですが↓のやり方がよくわかりません。
- 5 C言語初心者です。 C言語のファイル読み込みの仕方について質問です。 10行10列の数字がかかれてあ
- 6 c言語が初心者です。教えていただけると助かります c言語でキーボードから5個の単語を入力し、その後(
- 7 C言語課題!C言語初心者です。お願いします。
- 8 このプログラムの意味がよくわからないのですが教えていただけないでしょうか。 言語はc言語です...
- 9 C言語で以下の実行結果を教えてください C言語初心者ですお願いします 0123456789 1234
- 10 文字列strの中から文字cを探すプログラム(C言語)がわからない
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
scanfに文字が入力されたときに...
-
5
enterでループ終了
-
6
数字以外が入力されたらエラー...
-
7
C++でランレングス符号化のプロ...
-
8
CStringの中から数字だけの場合...
-
9
C言語の文字列の長さを計算し表...
-
10
C言語 While文(ループ)内の...
-
11
文字の入れ替えについて
-
12
VC++ アプリで中国語を表示したい
-
13
StringGridでの文字入力制限
-
14
scanf("%s", buf);でスペースを...
-
15
getchar()の意味・・・
-
16
プログラミングの問題で、キー...
-
17
複数行の入力を受け取る方法
-
18
ウムラウト文字の表示方法について
-
19
C言語で、入力された、文字列を...
-
20
scanfの後のfgetsについて
おすすめ情報