簡體   English   中英

從Printf到Fprintf

[英]Printf to Fprintf

我想用sql命令創建一個文件:

CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100));
INSERT INTO t1 VALUES(1,13153,'thirteen thousand one hundred fifty three');
INSERT INTO t1 VALUES(2,75560,'seventy five thousand five hundred sixty');
... 995 lines omitted
INSERT INTO t1 VALUES(998,66289,'sixty six thousand two hundred eighty nine');
INSERT INTO t1 VALUES(999,24322,'twenty four thousand three hundred twenty two');
INSERT INTO t1 VALUES(1000,94142,'ninety four thousand one hundred forty two');

當我使用printf時,它可以工作:

printf("INSERT INTO t1 VALUES(%d, %d, '", i, nbAlea);
NombreVersMots(nbAlea);
printf("');\n");

但是我不能使用fprintf:

fprintf(fichier, "INSERT INTO t1 VALUES(%d, %d, '", i, nbAlea);
fprintf(fichier, NombreVersMots(nbAlea)); // <- HERE IS MY PROBLEM
fprintf(fichier, "');\n");

我找不到使用第二行的方法。

我給你你需要的程序:

char *one[]={"", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};
char *ten[]={"", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};
void pw(long n,char ch[])
{
    if(n>19)
    {
        printf("%s %s ",ten[n/10],one[n%10]);
    }
    else
    {
        if(n) // pour eviter les espaces inutiles quand la boucle n'affiche rien
        {
            printf("%s ",one[n]);
        }
    }
    if(n)
    {
        printf("%s",ch); // affiche 'million', 'thousand' ou 'hundred'
    }
}

void NombreVersMots(long m)
{
    pw((m/1000000),     "million ");
    pw(((m/100000)%10), "hundred ");
    pw(((m/1000)%100),  "thousand ");
    pw(((m/100)%10),    "hundred ");
    pw(((m/1)%100),     "");
}

非常感謝您能幫助我!

您對NombreVersMots調用會調用pw ,后者會調用printf (不是fprintf )。 您可以通過用fprintf替換pw printf並使NombreVersMotspw帶有FILE*參數傳遞給fprintf

重寫NombreVersMots以使用fprintf()並接受FILE *參數。 然后,如果要在頂層使用printf ,請使用stdout作為參數來調用它。 即:

void pw(FILE *file, long n, char ch[])
{
   ...
   fprintf(file, "blah");
}

void NombreVersMots(FILE *file, long m)
{
    pw(file, (m/10000000), "million);
}

NombreVersMots(fichier, 42);  // As before
NombreVersMots(stdout, 43);  // To stdout

好問題是內部NombreVersMots(long m)使用printf而不是fprintf 考慮修改它(特別是pw函數)以在內部使用fprintf,也可以將輸出流也作為參數添加到NombreVersMots(long m)中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM