紀錄c語言結構體學習之路-第一天

以下習題摘自 C Primer Plus

月份名

1.程序。用戶提供月份名的拼寫,返回一年中到該月為止(包括該月)的總天數。(strcmp()),結構模板,一個月份名,該月份名的三個字母縮寫,該月份的天數及月份號。
分析發現,需要月份結構的數組,然后向函數傳入數組。然后如何在函數形參列表聲明這個數組形參?
初次代碼如下

#include <stdio.h>
#define SIZE 10
int read_days(char * mon_name,struct month * ptr);
struct month{
    char name[SIZE];
    char suo[SIZE];
    int num;
    int index;
};
int main (void)
{
    char input[SIZE];
    int sum;
    struct month arr[4]={
        {"Jannuary","Jan",31,1},
        {"February","Feb",28,2},
        {"March","Mar",31,3},
        {"April","Apr",30,4}
    };
    scanf("%s",input);
    sum=read_days(input,arr);
    printf("%d",sum);
    
}
int read_days(char * mon_name,struct month * ptr)
{
    int i=0;
    
    for
}

于是翻了答案..
截取了函數那段的代碼

#include <stdio.h>
#include <string.h>
//字符處理頭文件
#include <ctype.h>
int days(char * m)
{
int total = 0;
int mon_num = 0;
int i;
/* int toupper(int c);如果c是小寫字符,則返回其大寫字符,    
否則返回c*/
m[0] = toupper(m[0]);
for (i = 1; m[i] != '\0'; i++)
//和toupper相反,返回小寫 
m[i] = tolower(m[i]);
for (i = 0; i < 12; i++)
if (strcmp(m, months[i].name) == 0)
{
mon_num = months[i].monumb;
break;
}
if (mon_num == 0)
total = -1;
else
for (i = 0; i < mon_num; i++)
total +=months[i].days;
return total;       

剛開始看得挺懵逼的,后來在xcode里跑了一下,又用debug看了一下,搞懂了他想干嘛。
其實它考慮了各種情況。
1.用戶輸入了正確的月份名但大小寫不同會造成strcmp比較ASCII碼時出錯,于是便統一把所有的第一個字母toupper,其他字母tolower(形參列表可以傳入字符).
2.用戶亂輸字符串。因為main函數里測試條件只要求輸入的是字符串以及不是q退出,于是在days()里,如果沒有匹配的,便為無效輸入,最后才是累加。
3.關于之前考慮的傳入結構數組的問題,其實不必。把結構體和結構數組都寫在外面,那么就可以被任意調用了。
4.順便積累些變量名。縮寫-abbrev,一月的天數---monumb/mon_num,總天數---daytotal,此處days函數,然后形參就亂取了個m。
5.還有個地方易錯,就是字符串老是忘打雙引號,像這樣..

屏幕快照 2017-11-29 下午1.14.50.png

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 計算機二級C語言上機題庫(南開版) 1.m個人的成績存放在score數組中,請編寫函數fun,它的功能是:將低于平...
    MrSunbeam閱讀 6,453評論 1 42
  • 指針是C語言中廣泛使用的一種數據類型。 運用指針編程是C語言最主要的風格之一。利用指針變量可以表示各種數據結構; ...
    朱森閱讀 3,473評論 3 44
  • 第5章 引用類型(返回首頁) 本章內容 使用對象 創建并操作數組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,270評論 0 4
  • 那時候,我朋友的家門口是一所學校,學校正對面,就是一家沙縣。 按道理,我家旁邊也有一所學校,學校緊挨著的也是一家沙...
    桑鳩閱讀 328評論 0 2
  • 最近閑來無事翻看以前的東西,竟找到了許多被我自己遺忘掉的心情日記,不禁感慨,我也曾如此年少輕狂,也曾偷偷暗自神傷,...
    工程師姐夫閱讀 338評論 0 2