2012-05-12 11 views
0

私はプログラミングの割り当てを受けており、ユーザはこの形式の日付をdd/mm /年の形式で入力することができるプログラムを作成するように求められます。次に、それらの数字のそれぞれを抽出し、構造内の日、月、年のフィールドに入れる方法を見つけなければなりません。文字列の文字をCに追加

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

構造体宣言:

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); 

しかし、これは機能しません。私はアイデアが不足しています。この問題を解決する方法についていくつか指導してください。

ありがとうございました。

+1

project [xxx] .date.dayは文字列ではなく文字列です。ただ**一つの文字** – wildplasser

+0

はimerominiaを定義します – akonsu

+1

'+'は '' strncpy'、 'strncat'を使うか、別々に各バイトを割り当てます。 – Amadan

答えて

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で入力されると考えます。前入力:2012年7月3日。最初の7と3の前に0を書き留めておいてください。まず、このように試してみて、後ですべてのエラーシナリオを処理するために自分で即興で行うことができます。

2

あなたは、数字として保存int使用する場合:変換することについては

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

は、charがintに...

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

が、これがどのように動作するかを理解し、同月行いますそして年。ここで

1

[今日] 12/05/2012を入力することができます。今書き
I = 0; //日付は( "%d個"、strの[i])とstrの中で
のprintfで考える; //今同等のASCII文字

を取得あなたはのACIIの文字を知っていますchar 2. intのascii charから減算します。2.変数に格納し、配列全体で減算します。

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を使うにはもう少し手間がかかりますが、カレンダーを知ることに基づいて入力を検証なる、もあります。

関連する問題