ページ 1 / 1
printf関数で勝手に改行される
Posted: 2010年4月12日(月) 18:42
by 白
data[0].name = AAAa
data[1].name = aaaA(どちらもchar型)
としてある状態で
for(i = 0;i < 2;i++){
printf("%d|%d|%s\n",i,hantei(int型で0が入ってます),data.name);
}
出力:
0|0|AAAa
1|0|
aaaA
と表示されてしまいます。なぜか勝手に改行が入ってしまいます。
printf("%d|%d|%s\n",i,hantei,data[0].name);
printf("%d|%d|%s\n",i,hantei,data[1].name);
としてみても同じ結果になりました。
解決方法を調べてみようにも検索キーワードを
どう設定すればよいのかわからず、どうにもなりませんでした。
解決策を教えてください。お願いします。
Re:printf関数で勝手に改行される
Posted: 2010年4月12日(月) 18:46
by 組木紙織
"\n"は改行を意味します。
これを省いて下さい。
[追記]
バックスラッシュを円マークと読み替えてください。

Re:printf関数で勝手に改行される
Posted: 2010年4月12日(月) 20:16
by 白
出力: 0|0|AAAa 1|0| aaaA
ではなく
出力:
0|0|AAAa
1|0|
aaaA
となっているのを
出力:
0|0|AAAa
1|0|aaaA
こうしたかったのです。
すみません、間違えて改行をし忘れていたようです。
本当にすみません、再度でありますが、よろしくお願いします。
Re:printf関数で勝手に改行される
Posted: 2010年4月12日(月) 20:29
by 組木紙織
実行可能な最小規模のコードをあげてください。
提示された状況では出力結果の再現できません。
Re:printf関数で勝手に改行される
Posted: 2010年4月12日(月) 21:15
by 白
#include <windows.h>
#include <stdio.h>
int read_url_file(void);
int display();
struct checkdata{
char name[256];
char url[256];
int size;
int day;
int month;
int year;
int hour;
int minute;
int second;
};
int gyo = 0;
struct checkdata data[256];
int main(void){
read_url_file();
display();
return 0;
}
int display()
{
int i,hantei;
hantei = 0;
for(i = 0;i < 2;i++){
printf("%d|%d|%s\n",i,hantei,data.name);
}
return 0;
}
int read_url_file(void){
int i = 0;
int ret;
FILE *Udata;
Udata = fopen("url1.fs","r");
while((ret = fscanf(Udata,"%[^,],%[^,],%d,%d,%d,%d,%d,%d,%d",data[gyo].name,data[gyo].url,&data[gyo].size,&data[gyo].day,&data[gyo].month,
&data[gyo].year,&data[gyo].hour,&data[gyo].minute,&data[gyo].second))!= EOF){
gyo++;
}
fclose(Udata);
return 0;
}
ファイルurl1の内容は
AAAa,http://ath.cx/bbs/sst/sst.php?act=dump& ... 11,15,23,0
aaaA,http://cx/bbs/sst/sst.php?act=dump&cate ... 11,15,23,0
こんなかんじです。何度も手間をおかけし申し訳ありません
こんなかんじでどうでしょうか?
Re:printf関数で勝手に改行される
Posted: 2010年4月12日(月) 21:46
by 組木紙織
現象を再現できる"最小規模"のコードをあげて欲しかったです。
"%[^,],%[^,],%d,%d,%d,%d,%d,%d,%d"
↓
" %[^,],%[^,],%d,%d,%d,%d,%d,%d,%d"
Re:printf関数で勝手に改行される
Posted: 2010年4月12日(月) 22:00
by Poco
前の行の改行コードがメンバnameの中に入っているためにそのような現象が起きています。
書式指定の先頭に空白を入れてください。
"%[^,],%[^,],%d,%d,%d,%d,%d,%d,%d"
→" %[^,],%[^,],%d,%d,%d,%d,%d,%d,%d"
参考URL
http://www9.plala.or.jp/sgwr-t/c/sec05.html#s5-4
被っちゃったorz

Re:printf関数で勝手に改行される
Posted: 2010年4月13日(火) 20:53
by 白
解説ありがとうございます。参考URLまでも
出していただき、またCに対する理解が一歩深まりました。
実行できる最小規模のソースでこのレベルです。
もっともっと小さくなるのでしょうが、
今の私のレベルではこれよりも小さくしようとすると
伝えたいことを伝えられなくなりそうで、長々としたもの
はりつけてしまいました。本当にすみません。
質問の方法が悪かったにも関わらず、ご協力
本当に感謝してます。ありがとうございます。
また質問させていただくこともあると思いますが、
その時も、ご助力いただければ幸いです。
Re:printf関数で勝手に改行される
Posted: 2010年4月14日(水) 13:02
by 組木紙織
規模を小さくしてprintf()が原因でないことに気づいてほしい意図がありました。
表現がきつかったとおもいます。
(そこは反省点ですね)
もう少し小さく書くためには
配列を使わない
fscanf()の書式指定を減らすとともに入力ファイルの内容も出来るだけ減らす
ことが出来ると思います。