怎麼改這題C語言的錯誤?

時間 2021-05-29 22:56:36

1樓:孤星

char sx表示的是乙個字元陣列,也就是字串

在你的程式裡面是要乙個二維的字元陣列或者是字元指標陣列

應該寫成 char *sx=......

2樓:霍工

問題有很多:

2.輸入歲數是有bug的,因為無法確認是在哪年時的年齡;即使年齡正確,若如過幾年再執行就會出錯;總的來說沒有時間的可移植性,正確的應該是輸入出生年份。

3.scanf後邊要增加清理輸入緩衝區的程式段,否則萬一年份輸入裡帶有非法字母字元,那麼程式就會容易崩潰,出現意想不到的後果。

4.生肖和星座的起源很古老,先秦時期就已經確定有生肖,因此年份是可以小於0的(即西元前);而星座的起源更早。我們以確定的時間秦朝西元前221年為準,因此年份應該是大於-221的。

5.地球預計還有50億年的壽命,之後再不會有人類生命(暫無法考慮技術進步),那麼年份應該是小於50億的,因此年份應該用long long型別才夠用。

以下是改進的程式段:

long long year;

printf("輸入出生年份:");

scanf("%lld",&year);

char c;

//清理緩衝區,否則在輸入年份時遇到非法輸入會崩潰

while((c = getchar()) != '\n' && c != EOF);

if(year<-221||year>5000000000)

printf("Error!\n");

else

printf("生肖:");

switch(year%12)

case 0: printf("猴"); break;

case 1: printf("雞"); break;

case 2: printf("狗"); break;

case 3: printf("豬"); break;

case 4: printf("鼠"); break;

case 5: printf("牛"); break;

case 6: printf("虎"); break;

case 7: printf("兔"); break;

case 8: printf("龍"); break;

case 9: printf("蛇"); break;

case 10: printf("馬"); break;

case 11: printf("羊"); break;}

3樓:Welt

樓上說的是對的,但即使你改過來了,還是會出錯(或警告),因為你定義陣列元素是char型別,但是你具體定義時用的是雙引號,也就是字串

我這字還有救嗎,要怎麼改才好

回家 不認路 有,簡單粗暴就是臨帖 下面說說我的看法 看題主的字,可以看出以前可能花了時間練過,但是收益不太顯著,從一些筆畫和間架結構可以稍微看出來,但是相比於其他寫字寫成習慣的,你的字可能就是半成品,寫字還不太固定,此時改變的話比較好。剛開始改的時候,先注意點行和段落,排面上的一點小問題注意一下,...

這個c語言程式設計題該怎麼做?

劉雲賓 將各個數字都轉換為字串 將各個字串排序,大的在前,小的在後 將各個字串從左到右連線起來,就是答案 C 實現 include include include include include std string fun int n,int a int mainint n 3 int a std...

為什麼c語言的這個會有錯誤?

前面的回答都是正確的,我只補充下缺少的思考環節。編譯器選項卡的日誌 行列單元資訊 1 2 C Users lenovo 計算.c Warning imcompatible implicit declaration of build in fuction printf 翻譯 警告 內建函式printf...