0

私にはプログラミングの割り当てがあり、ユーザーがこの形式のdd / mm/yearで日付を入力できるプログラムを作成するように求められます。次に、これらの各数値を抽出し、日、月、年のフィールドを構造体に配置する方法を見つける必要があります。

ユーザーの入力全体を文字列として読み取り、必要な文字列の値を選択することを考えました。これが私のコードです。

構造体宣言:

 struct datestructure{
    char day;
   char month;
   char year;
  };

struct prj{
   int ID;
   struct namestructure name;
   struct datestructure date;
   float price;    

 };



 struct prj project[MAX];

そして、これが私が書いたコードです。

     char dateinput[11];
 scanf("%s", dateinput);


 printf("%s", dateinput); //making sure that the input is read correctly


 project[n].date.day = dateinput[0]+dateinput[1];


 printf("%s", project[n].date.day );

しかし、これは機能しておらず、私はアイデアを使い果たしています。この問題を解決する方法についてのガイダンスを教えてください。

ありがとう。

4

4 に答える 4

2

それらを数値として保存する場合は、次を使用しますint

struct datestructure{
    int day;
    int month;
    int year;
  };

変換に関しては、charからintへ...

project[n].date.day = (dateinput[0] - '0') * 10 + dateinput[1] - '0';

これがどのように機能するかを理解し、同じ月と年を実行します。

于 2012-05-12T14:19:05.093 に答える
1

以下にいくつかの提案を示します。

  1. 日、月、年の型を int に変更することを検討してください。
  2. 完全な日付文字列から日、月、年を解析します
  3. システム関数 (atoi や strtol など) のいずれか、または独自のロジック コードを使用して、日、月、年のそれぞれを整数に変換します。

文字列を解析するためのいくつかの基本的なサンプル (理解するための単なる例です。他のより良い方法もあります):

char day[3] = {0};
char month[3] = {0};
char year[5] = {0};

memcpy(day, dateinput,2);
memcpy(month,dateinput+3, 2);
memcpy(year,dateinput+5, 4);

注:上記のコードは、誤った入力を処理せず、1 桁の日付と月が先行する 0 で入力されると見なします。例: 07/03/2012. 7 と 3 の前の 0 に注意してください。最初にこのように試し、後で自分で即興ですべてのエラー シナリオを処理できます。

于 2012-05-12T14:21:15.147 に答える
1

あなたはすでに を使用していますがscanf、これはあなたが思っている以上のことができます:

#include <stdio.h>

struct datestructure {
    int day;
    int month;
    int year;
};

int main() {
    struct datestructure date;
    int count = scanf("%d/%d/%d", &date.day, &date.month, &date.year);
    if (count != 3) {
        printf("Invalid input\n");
    } else {
        printf("You said %d-%d-%d\n", date.year, date.month, date.day);
    }
}

もありstrftime、使用するにはもう少し手間がかかりますが、カレンダーに関する知識に基づいて入力を検証します。

于 2012-05-12T18:53:09.343 に答える
1

入力文字列として 12/05/2012[today] を取ることができます。
ここで i = 0 と書きます;// 日付が str にあると考えてください
printf("%d", str[i]);// 同等の ascii char を取得します

これで、char 2 の acii char がわかりました。int 2 の ascii char からそれを引きます。変数に格納し、配列全体でそれを引きます。

于 2012-05-12T14:31:57.013 に答える