Глюки Borland C++ 3.1
Oct. 4th, 2010 03:49 pmПо работе набросал небольшую программку. Ну, я честно признаюсь, в си не особо силён. Так, со справочником и гуглом пишу. Редко бывает нужда писать Но тут вот прибило. Собственно говоря программа генерирует нужный мне текстовый файл. В начале файла должна быть строчка даты, вида
Date is: 30/09/2010
и дальше идут строчки со временем:
Time is: 01:01:01 input: 0.0000000000
Программа моя запрашивает дату, время и т.п. Забавно, что конструкции абсолютно идентичные, однако почему-то переменная day остаётся равной нулю, вот непонимаю я. Кто подскажет в чём засада? Код под катом, ввод дня идёт в строчке № 16
З.Ы. Попробую это скомпилить gcc в линухе, но позжа. Скажу о результатах.
UPD Заменил char на int - всё заработало. Моя микроконтроллерная привычка экономить каждый байт обернулась против меня.
Date is: 30/09/2010
и дальше идут строчки со временем:
Time is: 01:01:01 input: 0.0000000000
Программа моя запрашивает дату, время и т.п. Забавно, что конструкции абсолютно идентичные, однако почему-то переменная day остаётся равной нулю, вот непонимаю я. Кто подскажет в чём засада? Код под катом, ввод дня идёт в строчке № 16
1 #include <stdio.h> /* standard I/O */ 2 #include <string.h> /* for strcpy - 3 occurrences */ 3 #include <stdlib.h> /* for exit - 1 occurrence */ 4 #include <ctype.h> 5 FILE *fp; 6 int main(void) 7 { 8 unsigned short i, year = 2010; 9 char sec=0,min=20,ch=14, day = 30, month = 10; 10 fp = fopen ("volt.txt","w"); 11 12 // printf("Input date (Day Month Year):"); 13 // while (scanf("Input date (Day Month Year): %02d %02d %4d\n", &day, &month, &year) !=1) 14 15 printf("Input Day:"); 16 while (scanf("%02d", &day) !=1) 17 printf("Error, please input Day:"); 18 19 printf("Input Month:"); 20 while (scanf("%02d", &month) !=1) 21 printf("Error, please input Month:"); 22 23 printf("Input date Year:"); 24 while (scanf("%4d", &year) !=1) 25 printf("Error, please input Year:"); 26 // scanf("%02d %02d %4d", &day, &month, &year); 27 28 printf("Input start Hour:"); 29 while (scanf("%02d", &ch) !=1) 30 printf("Error please input start Hour:"); 31 32 printf("Input start time Min:"); 33 while (scanf("%02d", &min) !=1) 34 printf("Error please input start Min:"); 35 36 printf("Date is: %02d/%02d/%4d\n", day, month, year); 37 fprintf(fp,"Date is: %02d/%02d/%4d\n", day, month, year); 38 for(i=0;i<40000;i++) 39 { 40 if (!(i%3)) 41 { 42 sec++; 43 if (sec == 60) 44 { 45 sec=0; 46 min++; 47 if (min == 60) 48 { 49 min = 0; 50 ch++; 51 52 } 53 } 54 } 55 printf("Time is: %02d:%02d:%02d input: 0.0000000000\n", ch, min, sec); 56 fprintf(fp,"Time is: %02d:%02d:%02d input: 0.0000000000\n", ch, min, sec); 57 } 58 59 60 // printf("'%c'\n", key); 61 fclose(fp); 62 return 0; 63 }
З.Ы. Попробую это скомпилить gcc в линухе, но позжа. Скажу о результатах.
UPD Заменил char на int - всё заработало. Моя микроконтроллерная привычка экономить каждый байт обернулась против меня.
no subject
Date: 2010-10-04 12:14 pm (UTC)no subject
Date: 2010-10-04 12:15 pm (UTC)no subject
Date: 2010-10-04 12:16 pm (UTC)no subject
Date: 2010-10-04 12:22 pm (UTC)no subject
Date: 2010-10-04 12:21 pm (UTC)no subject
Date: 2010-10-04 12:20 pm (UTC)t.c:17: предупреждение: формат ‘%02d’ предполагает тип ‘int *’, но аргумент 2 имеет тип ‘char *’
я бы с ним не спорил.
Переменная day затирается после ввода month. Если распечатать day до ввода month, то всё хорошо.
Если поменять типа на int или использовать модификатор %hhd (signed char or unsigned char argument), то работает как надо.
no subject
Date: 2010-10-04 12:23 pm (UTC)no subject
Date: 2010-10-04 12:38 pm (UTC)no subject
Date: 2010-10-04 12:46 pm (UTC)no subject
Date: 2010-10-04 12:48 pm (UTC)no subject
Date: 2010-10-04 12:50 pm (UTC)no subject
Date: 2010-10-04 12:38 pm (UTC)no subject
Date: 2010-10-04 12:46 pm (UTC)no subject
Date: 2010-10-04 12:42 pm (UTC)no subject
Date: 2010-10-04 12:45 pm (UTC)