これは入力として日付形式を取るのに最適な方法です。これは.. dd/mm/yyyyです。 私は( "%D /%D /%D .........)scanf関数を使用することを好まない。Cのプログラミングで文字列を入力として誕生日形式を取る方法
-1
A
答えて
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
を与えると、これはy
にm
と12
にd
で23
、4
を格納します。
を使用して入力してくださいことはありませんと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++;
}
}
関連する問題
- 1. C#入力文字列が正しい形式でない
- 2. 入力文字列の形式は、
- 3. は、入力として次の文字列を取るC#で
- 4. PSオブジェクトをカスタム形式の文字列として出力する方法
- 5. 入力文字列をbashでチェックする方法は、バージョン形式(n1.n2.n3)
- 6. HH:MM:SS形式の文字列への時間(C言語プログラミング)
- 7. 文字列形式の日付から唯一の年を取る方法は?
- 8. 形式のJSON文字列を出力する方法は?
- 9. Pythonの日付比較と文字列出力/形式
- 10. IOSでの日時/文字列形式
- 11. Objective-Cの形式の日付と文字列
- 12. Visual Studioの - 入力文字列が正しい形式で
- 13. 日時文字列形式の整列
- 14. 姓、名字、誕生日のAndroid O自動入力機能
- 15. ブートストラップdatepicker - 正しい形式の文字列として日付を取得する方法は?
- 16. Fで入力文字列が正しい形式でない#
- 17. ローカル日付形式を文字列として取得します。
- 18. C#で入力文字列の形式が正しくありません
- 19. netlogoで式に文字列を入力する方法
- 20. "file://"を文字列形式でC#
- 21. oracle10gの文字列の日付を日付形式に変換する方法
- 22. 日付は文字列形式です
- 23. R:日付形式の文字、YYYYMMDDのような入力
- 24. 出力ボックスにユーザー入力を文字列形式で出力します
- 25. 入力文字列の形式は1と2
- 26. 入力文字列が正しい形式エラーで
- 27. 入力文字列が正しい形式でない
- 28. VB.NET:入力文字列が正しい形式でない
- 29. スプラット - 入力文字列が正しい形式でない
- 30. 入力文字列が正しい形式でない - ダブルタイプ
私は質問を理解していません。文字列としての入力は 'fgets'を使って行われます(' gets'を使用しないほうが良い)。 'scanf'を主張するならば、manページの%sフォーマット指定子を詳しく見ることができます。 – Gerhardh
'char date [10]; scanf( "%s"、date); ' – George
**決して' gets'を使うことはありません。これはもう標準の一部ではなく、ファーストクラスのセキュリティリスクです。 – Olaf