C言語で文字列を扱う時、配列に1文字ずつ格納していくか、ポインタ変数を使うと思うのですが、
ポインタ変数を使った場合の処理が上手くできずに困っています。
詳細を説明すると、値を取得して、前回取得した値と比較します。
それで、同じだった場合には"chritm1"に格納した矢印を書き込む処理なのですが、
現在はfor文により配列に格納したものを使用していますが、
この部分をポインタ変数を使用した処理(1文字1文字書くのではなく、string型変数の用に書き込みたい)
に変更したいのですが、上手くできないという状況です。
何かとっかかりとなるようなことでもかまいませんので、教えてください。
よろしくお願いします。
static int mainA(
char *fileName){
int loop, i, j;
FILE *fd;
/* 前回値格納用 */
char *preval;
/* 現在値格納用 */
char *thisval;
/* 同値用記号格納用 */
char chritm1[6] = " → ";
-- 中略 --
for( i = 0 ; i < 150 ; i++ ) {
thisval = redata[i];
/* 値の比較 */
if(preval == thisval) {
for( j = 0 ; j < 6 ; j++){
/* 前回値と同じ場合は矢印 */
fprintf( fd, ",%c",chritm1[j]);
}
}else{
/* 前回値と異なる場合は値 */
fprintf( fd, ",%s", thisval);
}
preval = thisval;
/*完了したら改行 */
fprintf( fd, "\n" );
}
-- 以下略 --
No.2
- 回答日時:
if (preval == thisval)
このif文はprevalの値とthisvalの値を比較しています。
双方の値(どこかを指しているアドレス値)は通常異なります。
このif文の結果は偽となります。
prevalが指している文字列の内容とthisvalが指している文字列の内容が一致しているかどうかを確認するときは
if (strcmp(preval, thisval) == 0)
と書きます。
No.1ベストアンサー
- 回答日時:
たぶん次の1行が答えと思います。
(",%c"という記述があるので,for文の処理とは同じ結果になりませんが問題ないはず。)fprintf( fd, ",%s", chritm1 );
また、値の比較として「if(preval == thisval)」としていますが正常に動作しない気がします。
値が文字列として格納されているのであればstrcmp()関数で比較するか一度数値に変換して比較する必要があります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Ruby 初心者プログラミング 3 2022/10/12 11:31
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# 関数ポインタの高速化のメリット 7 2023/05/05 20:15
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
wsprintf関数の使い方について
-
ダブルクォーテーションを含む...
-
javaのCSVデータ読込についてです
-
ArrayListの要素数の上限
-
8桁整数を限りなく短い文字列に...
-
CString 数値チェック
-
Stringクラスの変数の格納アド...
-
バイト配列からfloat型の数値を...
-
結合した文字列をファイル名に...
-
偶数ビットだけと奇数ビットだ...
-
線形探索と2分探索
-
実行シェルからCOBOLへパラメー...
-
ResultSetの内部構造(Java)
-
Javascriptでマシン固有の情報...
-
文字列生成を総当りで行う場合
-
BCD形式で時刻を!
-
Evaluate()に文字列の形式の数...
-
素朴な疑問
-
DateTimePickerに値を入れたい...
-
JSPでHashMap・配列の変数の値...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダブルクォーテーションを含む...
-
ArrayListの要素数の上限
-
特定の文字列を複数抜き出した...
-
javaのCSVデータ読込についてです
-
wsprintf関数の使い方について
-
BCD形式で時刻を!
-
結合した文字列をファイル名に...
-
Evaluate()に文字列の形式の数...
-
C言語の変数(LSB)の合わせ込...
-
実行シェルからCOBOLへパラメー...
-
hiddenの値を消したくない!
-
VB6,論理演算子Orの使い方がわ...
-
DateTimePickerに値を入れたい...
-
char型での演算子
-
String str = "a\\\\b\\\\c";
-
Javaの問題なのですが、「3文字...
-
8桁整数を限りなく短い文字列に...
-
matchesを否定文として使う方法...
-
DOSバッチで変数の値を変数名に...
-
excel vba 時間計算と条件分岐...
おすすめ情報