2016-04-05 11 views
-1

こんにちは、誰でも私はprintfの機能に何が起こっているのか教えていただけますか? 、フォーマット '%i' は、引数の型の「int型見込んが、引数2 は 'CHAR *' [-Wformat =] time2.hour型を持つ、time2.min:私はprintf関数とあまりにも多くの引数に構造体メンバを入力するエラー

警告のエラーを取得しておきますtime2.sec、 time3.hour、time3.min、time3.sec);

、その後

警告:[-Wformat-超引数]形式の引数が多すぎ

誰もが解決する方法についてのいくつかのポインタを与えますか?あなたが長いprintf文で2つの文字列リテラルを持っているように感謝

#include <stdio.h> 

struct time 
{ 
    int hour; 
    int min; 
    int sec; 
}; 

int main (void) 
{ 
    struct time time1, time2, time3; 
    struct time elapsed_time (struct time time1, struct time time2); 

    printf("Enter your first time (hh:mm:ss) : "); 
    scanf ("%i:%i:%i", &time1.hour, &time1.min, &time1.sec); 

    printf("Enter your second time (hh:mm:ss) : "); 
    scanf ("%i:%i:%i", &time2.hour, &time2.min, &time2.sec); 

    time3 = elapsed_time(time1,time2); 

    printf("The time difference between %.2i:%.2i:%.2i & %.2i:%.2i:%.2i", 
      "is %.2i:%.2i:%.2i.\n", time1.hour, time1.min, time1.sec, 
      time2.hour, time2.min, time2.sec, time3.hour, time3.min, time3.sec); 

    return 0; 
} 

struct time elapsed_time (struct time time1, struct time time2) 
{ 
    struct time time3 = { 0, 0, 0 }; 

    time3.hour = time2.hour - time1.hour; 
    time3.min = time2.min - time1.min; 
    time3.sec = time2.sec - time1.sec; 

    return time3; 
} 
+1

2つの文字列リテラルを連結したい場合は、それらの間に '、'を入れないでください。 – EOF

+0

あなたはすでにあまりにも**ポインタ**を持っていると思います。もう少し与える必要はありません... – Olaf

答えて

1

それは見えますが、printf文は最初に1つの文字列を可能にし、それはすべて%.2i形式のプレースホルダが含まれているものでなければなりません。

今、printfは最初のものを取得し、最初のものへの入力引数として2番目の文字列を使用しようとします。

これらの2つの文字列を1つの文字列に結合すると動作するはずです。

+0

ありがとう、どうやって複数行のprintf文を1つに連結できますか? –

+0

"、"を削除して長い行にするか、連結して1つの文字列にします。 part1 = "part1 text"のように。 part2 = "part 2 text"など、それらを一緒にstrcatします。フォーラムの「Cで文字列を連結する方法」を参照してください。例が表示されます。 – Kevin

関連する問題