構造体に入れた文字の出力について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
忍者

構造体に入れた文字の出力について

#1

投稿記事 by 忍者 » 6年前

c言語初心者なので説明に不備があったらすいません。
dousenという名前の構造体にBook2に入っている文字を入れて
その文字をちゃんと入れれているかどうか確認するために
出力してみたところ、なぜか数字に文字化けしていました。
どうすれば文字のまま入れることができるのでしょうか


#include<stdio.h>
#define BUFF 100
struct dousen{
char camera;
};


int main(void){
char line[BUFF];
struct dousen pa[100];
FILE *ofp;
int i;

ofp = fopen("Book2.csv","r");
if(ofp == NULL){
printf("file not open1\n");
fclose(ofp);
return -1;
}



fgets(line, BUFF-1, ofp);
while(fgets(line, BUFF-1, ofp) != NULL){
//printf("%s", line);
sscanf(line, "%d",&pa.camera);
printf("%d\n",pa.camera);

i++;


}

return 0;}

box
記事: 2002
登録日時: 13年前

Re: 構造体に入れた文字の出力について

#2

投稿記事 by box » 6年前

忍者 さんが書きました: char camera;
sscanf(line, "%d",&pa.camera);
printf("%d\n",pa.camera);
[/code]

char型で定義しているメンバーcameraに整数型で値を読んで整数型で出力しているので、
そうなるのは必然ではないかと。
cameraというメンバーをchar型で扱いたいですか?それともint型などの整数として扱いたいですか?話はそこからです。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 構造体に入れた文字の出力について

#3

投稿記事 by みけCAT » 6年前

int*型のデータを要求するsscanf関数の書式%dに対し、char*型のデータを渡しているので、未定義動作です。
未定義動作が起きると、(定義上は)何が起こってもおかしくありません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

返信

“C言語何でも質問掲示板” へ戻る