2012-05-12 95 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

define imerominia – akonsu

+1

在C中'+'從來沒有串聯使用'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); 

注:上面的代碼並不需要關心錯誤的輸入,並認爲具有單個數字的日期和月份將以0.前輸入。Ex輸入:07/03/2012。請注意7和3之前的前面的0。首先,您可以嘗試像這樣並稍後自行即興處理所有錯誤情況。

2

如果你想將其保存爲數字,使用int

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

至於轉換,字符爲int ...

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

理解它是如何工作的,做同樣的一個月和一年。

1

你可以拿12/05/2012 [今天]作爲輸入刺痛。現在寫
I = 0; //考慮的日期是在海峽
的printf( 「%d」,STR [1]); //獲得等同的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,這需要使用多一點的努力,但基於寂寂日曆將驗證輸入。