|
|||||||||||
| 技術交流 | 電路欣賞 | 工控天地 | 數字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統 驅動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產業 | CAN-bus/DeviceNe |
gcc中編程出個問題 |
| 作者:bl20020825 欄目:驅動編程 |
我red hat linux9中自帶的GCC中試了個程序,但總會出現問題,我剛入門,不知是不是我c程序有問題,請大家指點一下,程序main.c如下: #include<stido.h> void bookinput(CHAR title[], float * price) { printf("please enter book record:\n"); scanf("%s %f",title,price); } void printbook(CHAR title[],float price) { printf("the book record is:%s %f\n",title,price); } CHAR ask(void) { CHAR i; printf("Do you want to enter again?\n"); scanf("%c",&i); } void main(void) { CHAR title[30]; float price; do { bookinput(title,&price); printbook(title,price); } while(ask()=='y'); } 以上就是全部的程序,然后我編譯 # gcc main.c -o main 執行 # ./main please enter book record: linux 2.5 the book record is:linux 2.5 Do you want to enter again? # 就是在“Do you want to enter again?”后面沒有等你輸入字符,就結束了整個程序,這是為什么呢?請大家指點一下 |
| 2樓: | >>參與討論 |
| 作者: em_minzh 于 2006/12/2 21:29:00 發布:
ask函數沒有返回值 ask函數最后應該返回i的值,增加一句:return i; |
|
| 3樓: | >>參與討論 |
| 作者: db10 于 2006/12/3 13:01:00 發布:
em_minzh 看得很仔細阿! |
|
| 4樓: | >>參與討論 |
| 作者: goodluckwu 于 2006/12/6 11:28:00 發布:
問題的關鍵在這里 二樓的說的是個問題,但是樓主的提出的問題不在那里。 如果只是返回的問題。在scanf處就應該會停下來。但實際的情況下是在scanf那里根本沒有停留。將10賦給了i。 出現這個問題的原因似乎是scanf不太認%c這個參數。好久不用c了不是特別的熟悉了。好像以前碰到過這個問題。 將樓主的程序修改了一下。就可以了。 |
|
| 5樓: | >>參與討論 |
| 作者: goodluckwu 于 2006/12/6 11:30:00 發布:
修改后的代碼: #include <stdio.h> typedef struct _Book{ CHAR title[40]; float price; }Book; void inputbook(Book *book) { printf("Please enter book record:\n"); scanf("%s %f", &(book->title), &(book->price)); } void printbook(Book *book) { printf("the book record is: %s %f\n", book->title, book->price); } CHAR ask() { CHAR buf[10]; printf("Do you want to enter another book?\n"); scanf("%s", buf); //printf("i=%s\n",buf); return buf[0]; } int main(void) { CHAR result = 'y'; Book book; while(result == 'y'){ inputbook(&book); printbook(&book); result = ask(); } return 0; } |
|
| 6樓: | >>參與討論 |
| 作者: goodluckwu 于 2006/12/6 11:33:00 發布:
順便說一句 樓主你的代碼縮進好亂。 原來我以為是粘貼到html之后造成的。 現在看來我貼過來的代碼并不亂。 即使只是做一個編程愛好者,也應該至少保持統一的縮進風格,使別人看你的代碼方便一點。 |
|
| 7樓: | >>參與討論 |
| 作者: rzsheng 于 2006/12/6 15:23:00 發布:
樓上的說得好呀 喜歡樓上的編程風格 |
|
| 8樓: | >>參與討論 |
| 作者: jzp1 于 2006/12/10 0:22:00 發布:
問題的在于 問題在于分析清楚scanf("%c",&i);這條語句它掃描進來是什么? 它掃描進來的是上一次輸完后的"回車符" 修改的方法有很多種,goodluckwu兄的結構體用的還是變好的. |
|
| 9樓: | >>參與討論 |
| 作者: em_minzh 于 2006/12/10 16:07:00 發布:
使用scanf("%c",&i)產生的問題實質 使用scanf("%c",&i)產生的問題實質是: 當程序運行到: scanf("%s %f", &(book->title), &(book->price)); 時,用戶輸入title,price數據后一定會輸入一個回車符,而這個回車符恰好又被作為 scanf("%c",&i);的輸入而接收。也就是說,回車符被保留到了變量i中。 這樣ask函數返回了回車符,程序自然要結束了。 |
|
|
|
Copyright © 1998-2006 www.qxvs.cn 浙ICP證030469號 |