, что лучше всего взять формат даты в качестве входных данных. Like this .. dd/mm/yyyy. я не люблю использовать зсапЕ ("% d /% d /% d .........);как принять формат даты рождения в качестве ввода со строкой в программировании c
ответ
Прежде всего, следует избегать 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;
}
Ваш вопрос не очень понятно
Если вы хотите знать, как принять. дата ввода с помощью зсапЕ, вот как это делается.
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++;
}
}
Я не понимаю вопроса. Вход как строка выполняется с помощью 'fgets' (лучше не использовать' gets'). Если вы настаиваете на 'scanf', вы можете более подробно рассмотреть спецификатор формата% s на странице руководства. – Gerhardh
'char date [10]; scanf ("% s", дата); ' – George
** Никогда никогда не используйте' gets'. Это уже не часть стандарта и риск безопасности первого класса. – Olaf