2017-01-26 15 views
-1

, что лучше всего взять формат даты в качестве входных данных. Like this .. dd/mm/yyyy. я не люблю использовать зсапЕ ("% d /% d /% d .........);как принять формат даты рождения в качестве ввода со строкой в ​​программировании c

+5

Я не понимаю вопроса. Вход как строка выполняется с помощью 'fgets' (лучше не использовать' gets'). Если вы настаиваете на 'scanf', вы можете более подробно рассмотреть спецификатор формата% s на странице руководства. – Gerhardh

+2

'char date [10]; scanf ("% s", дата); ' – George

+4

** Никогда никогда не используйте' gets'. Это уже не часть стандарта и риск безопасности первого класса. – Olaf

ответ

0

Прежде всего, следует избегать gets(), чтобы предотвратить переполнение буфера.

Вместо этого используйте самый безопасный fgets()

char *fgets(char *s, int size, FILE *stream)

fgets() считывает максимум один меньше символов размера из потока и сохраняет их в буфер, на который указывает с. Чтение останавливается после EOF или новой строки. Если читается новая строка, она сохраняется в буфере. Конечный нулевой байт (aq \ 0aq) сохраняется после последнего символа в буфере.

Затем вы можете использовать int sscanf(const char *str, const char *format, ...); которые

считывает входные данные из строки символов, на которую указывает ул.

Вот пример программы:

#include <stdio.h> 
#define MAXLEN 10 

int main(int argc, char **argv) 
{ 
    char date_of_birth[MAXLEN]; 
    int day_of_birth, month_of_birth, year_of_birth; 

    fgets(date_of_birth, MAXLEN, stdin); 

    sscanf(date_of_birth,"%d %*c %d %*c %d", &day_of_birth, &month_of_birth, &year_of_birth); 

    printf("\nDay of birth : %d\nMonth of birth : %d\nYear of birth : %d\n", day_of_birth, month_of_birth, year_of_birth); 

    return 0; 

} 
0

Ваш вопрос не очень понятно
Если вы хотите знать, как принять. дата ввода с помощью зсапЕ, вот как это делается.

int d,m,y;     //This is your code. 
scanf("%d/%d/%d",&d,&m,&y); //Now this tells that scanf expect input in this format. 

Если вы даете вход 23/4/12, Это будет хранить 23 в d, 4 в m и 12 в y.

никогда не принимать входной сигнал с помощью gets() и scanf(), поскольку они не проверяют переполнение буфера, и gets() был удален со стандартного пути назад. Это хорошо известный риск безопасности.

Вместо этого используйте fgets (). Примечание fgets() также сохраняет символ окончания новой строки, чтобы удалить его. Я использовал следующий метод ниже.

Для этого введите fgets().

#include <stdio.h> 
int main(){ 

     char date[10]; 

     fgets(date,10,stdin); 

     int i = 0; 
     //Now For Removing new line character from end of the string. 
     while(date[i]!='\0'){  

      if(date[i]=='\n'){ 
         date[i] = '\0'; 
         break; 
         } 

      i++; 
     } 

     }