2017-01-26 2 views
-1

これは入力として日付形式を取るのに最適な方法です。これは.. dd/mm/yyyyです。 私は( "%D /%D /%D .........)scanf関数を使用することを好まない。Cのプログラミングで文字列を入力として誕生日形式を取る方法

+5

私は質問を理解していません。文字列としての入力は 'fgets'を使って行われます(' gets'を使用しないほうが良い)。 'scanf'を主張するならば、manページの%sフォーマット指定子を詳しく見ることができます。 – Gerhardh

+2

'char date [10]; scanf( "%s"、date); ' – George

+4

**決して' gets'を使うことはありません。これはもう標準の一部ではなく、ファーストクラスのセキュリティリスクです。 – Olaf

答えて

0

まず、バッファオーバーフローを防ぐために、gets()を避ける必要があります。

代わりに、最も安全なfgets()

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

fgets()を使用したスト​​リームからsize文字未満で、ほとんど1で読み込み、バッファにそれらを保存するsが指します。 EOFや改行の後で読み込みが停止します。改行が読み取られた場合、改行はバッファに格納されます。終了nullバイト(aq \ 0aq)は、バッファ内の最後の文字の後に格納されます。

その後、あなたは文字列がstrで指さから

は、その入力を読み込む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

あなたの質問は非常に明確ではありません
あなたが取る方法を知りたい場合。ここでは、scanf関数を使用して日付の入力は、それがどのように行われるかである。

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を与えると、これはym12d234を格納します。

を使用して入力してくださいことはありませんとscanf()はバッファオーバーフローをチェックしないので、gets()は標準的な方法で削除されています。これはよく知られたセキュリティリスクです。

代わりにfgets ()を使用してください.Not 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++; 
     } 

     } 
関連する問題