2016-06-12 5 views
-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] (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) и получил тот же результат.

Затем я загрузил Eclipse, на котором с некоторым трудом пробежал все коды, включая @WeatherVane и voila !! Я использовал CodeLite на своем Mac.

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) ;;