printf関数で勝手に改行される

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

printf関数で勝手に改行される

#1

投稿記事 by » 15年前

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関数で勝手に改行される

#2

投稿記事 by 組木紙織 » 15年前

"\n"は改行を意味します。
これを省いて下さい。

[追記]
バックスラッシュを円マークと読み替えてください。

画像

Re:printf関数で勝手に改行される

#3

投稿記事 by » 15年前

出力: 0|0|AAAa 1|0| aaaA
ではなく
出力:
0|0|AAAa
1|0|
aaaA
となっているのを
出力:
0|0|AAAa
1|0|aaaA
こうしたかったのです。

すみません、間違えて改行をし忘れていたようです。
本当にすみません、再度でありますが、よろしくお願いします。

組木紙織

Re:printf関数で勝手に改行される

#4

投稿記事 by 組木紙織 » 15年前

実行可能な最小規模のコードをあげてください。
提示された状況では出力結果の再現できません。

Re:printf関数で勝手に改行される

#5

投稿記事 by » 15年前

#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関数で勝手に改行される

#6

投稿記事 by 組木紙織 » 15年前

現象を再現できる"最小規模"のコードをあげて欲しかったです。


"%[^,],%[^,],%d,%d,%d,%d,%d,%d,%d"

" %[^,],%[^,],%d,%d,%d,%d,%d,%d,%d"

Poco

Re:printf関数で勝手に改行される

#7

投稿記事 by Poco » 15年前

前の行の改行コードがメンバ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関数で勝手に改行される

#8

投稿記事 by » 15年前

 解説ありがとうございます。参考URLまでも
出していただき、またCに対する理解が一歩深まりました。

 実行できる最小規模のソースでこのレベルです。
もっともっと小さくなるのでしょうが、
今の私のレベルではこれよりも小さくしようとすると
伝えたいことを伝えられなくなりそうで、長々としたもの
はりつけてしまいました。本当にすみません。
 質問の方法が悪かったにも関わらず、ご協力
本当に感謝してます。ありがとうございます。
また質問させていただくこともあると思いますが、
その時も、ご助力いただければ幸いです。

組木紙織

Re:printf関数で勝手に改行される

#9

投稿記事 by 組木紙織 » 15年前

規模を小さくしてprintf()が原因でないことに気づいてほしい意図がありました。
表現がきつかったとおもいます。
(そこは反省点ですね)

もう少し小さく書くためには
配列を使わない
fscanf()の書式指定を減らすとともに入力ファイルの内容も出来るだけ減らす
ことが出来ると思います。

閉鎖

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