2017-01-08 7 views
0

で次のプログラムを実行する上でセグメンテーションフォールトを取得します。コード::ブロック16.01私は、次のプログラムはC IDEで書かれているC

質問:年、月と日付2つの日付の差を検索するプログラムを書きます。日付は有効な範囲にあり、最初の日付は秒より前になります。

//To find difference of two dates in years,months and dates, Dates are in valid range and first date falls before second. 

#include <stdio.h> 
int main() 

{ 
int d,d1,d2,m,m1,m2,y,y1,y2; 
printf("Enter first date (dd/mm/yyyy) : "); 
scanf("%d/%d/%d,&d1,&m1,&y1"); 
printf("Enter the second date (dd/mm/yyyy) : "); 
scanf("%d/%d/%d,&d2,&m2,&y2"); 
if(d2<d1) 
{ 
    if(m2==3) 
    { 
     if (y2%100!=0 && y2%4==0|| y2%400==0) // Checking leap year 
      d2+=29; 
     else 
      d2+=28; 

    } 
    else if (m2==5||m2==7||m2==10||m2==12) 
     d2+=30; 
    else 
     d2+=31; 

} 
if (m2<m1) 
{ 
    y2=y2-1; 
    m2+=12; 
} 
y=y2-y1; 
d=d2-d1; 
m=m2-m1; 
printf("Difference of the two dates is : "); 
printf("%d years,%d months,%d days\n",y,m,d); 
return 0; 
} 
+2

'のscanf( "%D /%D /%D&D1&M1、&y1"); ' - >'のscanf(" %dを/%d /%d "、&d1、&m1、&y1); – BLUEPIXY

+0

質問はあいまいです – Mark

答えて

2
scanf("%d/%d/%d,&d1,&m1,&y1"); 

scanf("%d/%d/%d,&d2,&m2,&y2"); 

あなたがscanf()のマニュアルを読む必要があります間違っています。

最初の引数はフォーマット文字列"%d/%d/%d"です。後で各アドレスを渡す必要があります。&d1, &m1, &y1

scanf("%d/%d/%d", &d1, &m1, &y1); 
scanf("%d/%d/%d", &d2, &m2, &y2); 

あなたは、関数の戻り値を確認する必要があります。

if (scanf("%d/%d/%d", &d1, &m1, &y1) != 3) { 
    fprintf(stderr, "Something go wrong!"); 
    return 1; 
} 
+0

今、私はそれを得ました、Stargateur – Shushrut

関連する問題