2016-06-12 16 views
-1

月の1日と1日の日数をとり、関連するカレンダーを印刷するプログラムを作成しています。私は3と30を入力した場合ループ印刷のための右揃え

それは

 1 2 3 4 5 
6 7 8 9 10 11 12 
13 14 15 16 17 18 19 
20 21 22 23 24 25 26 
27 28 29 30 

を印刷する必要がありますこれは私が

#include <stdio.h> 

void printclndr(); 

int main(){ 
    int first,days; 

    first = firstday(); 

    if(first<1||first>7) 
    { 
     printf("%d is not a valid day. Try again. \n",first); 
     firstday(); 
    } 

    days = monthdays(); 

    if(days<28||days>31) 
    { 
     printf("Retry. Enter days for a valid month. \n"); 
     monthdays(); 
    } 

    printf("\n"); 
    printclndr(first,days); 
    printf("\n\n"); 

    main(); 
} 

void printclndr(int day1, int numdays){ 
    int date,check,count,tab; 

    check = day1 + numdays; 
    tab = 0; 

    for(count=1;count<check;count++) 
    { 
     if(count<day1) 
     { 
      printf("\t"); 
      tab+=1; 
     } 
     if(count>=day1) 
     { 
      printf("%d\t",count-day1+1); 
      tab+=1; 
     } 
     if(tab==7) 
     { 
      printf("\n"); 
      tab=0; 
     } 
    } 
} 

int firstday(){ //function to get the starting day of the month 
    int day; //initializing local variables 
    printf("First day of the month (1= Sun, 7= Sat): "); 
    scanf("%d",&day); 

    return day; //returns the value of day 
} 

int monthdays(){ //function to get no of days in a month 
    int days; //local variables 
    printf("Number of days in the month: "); 
    scanf("%d",&days); 

    return days; 
} 

firstdayとmonthdays scanfのユーザ入力を書いたコードがあると正常に動作しています。私のコードが動作し、カレンダーを印刷します。今私はカレンダーを右揃えしたい。

私は

1 
8 
15 

代わりの

1 
8 
15 

私はそれをどのように行うのですがしたいですか?

+2

ファイルを使用する前に宣言します。 – JCx

+2

[エラー:gccと '6'の相反するタイプの重複](http://stackoverflow.com/questions/18582731/error-conflicting-types-for-six-with-gcc) – 5gon12eder

+0

@JCxありがとう。今すぐ実行します – Uttaran

答えて

0

私は"%2d\t"を使用して中央揃えの結果を得ました。

次に、私は("%*d/t",2,count-day1+1)を試してみて、同じ結果を得ました。

それから、私は@WeatherVaneとvoilaを含むいくつかの難易度ですべてのコードを実行したEclipseをダウンロードしました!!私はMacでCodeLiteを使用していました。

0

これは、要求されたとおりに番号を右揃えにします。

#include <stdio.h> 

void printclndr(int day1, int numdays){ 
    int day, count; 
    for(count = 1; count < day1-1; count++) {  // initial padding 
     printf("\t"); 
    } 
    count = day1 - 1; 
    for(day = 1; day <= numdays; day++) { 
     if(count >= 7) { 
      printf("\n"); 
      count = 0; 
     } 
     else if(count > 0) { 
      printf("\t"); 
     } 
     printf("%2d", day); 
     count++; 
    } 
    printf("\n"); 
} 

int main(){ 
    printclndr(3, 30); 
    printf("\n"); 

    printclndr(1, 28); 
    printf("\n"); 

    printclndr(2, 28); 
    return 0; 
} 

プログラムの出力:

    1  2  3  4  5 
6  7  8  9  10  11  12 
13  14  15  16  17  18  19 
20  21  22  23  24  25  26 
27  28  29  30 

1  2  3  4  5  6  7 
8  9  10  11  12  13  14 
15  16  17  18  19  20  21 
22  23  24  25  26  27  28 

     1  2  3  4  5  6 
7  8  9  10  11  12  13 
14  15  16  17  18  19  20 
21  22  23  24  25  26  27 
28 
+0

ありがとうございました。あなたのコードは私の問題を解決しました。 – Uttaran

1

カレンダーを印刷するときは、printf( "%nd"、number)を使用します。 nは小数点以下の桁数の最大値です。n = 2、printf( "%2d \ t"、count-day1 + 1);;