課程問題討論

99 views
Skip to first unread message

曹佐碩

unread,
Sep 16, 2010, 2:18:06 PM9/16/10
to NTUCSIE C2010
所有來信的問題和回覆都會放在這裡
同時也歡迎同學們直接在這裡討論

曹佐碩

unread,
Sep 16, 2010, 2:21:48 PM9/16/10
to NTUCSIE C2010
> 2010/9/16 <b999...@ntu.edu.tw>
> 助教您好
> 我是資工21號的李昌鴻
> 我在做worksheet3.1時
> 執行程式出來是沒問題的
> 可是po上去只有1分
> 問題如下
> source.c:3: warning: return type defaults to ‘int’
> source.c: In function ‘main’:
> source.c:9: warning: implicit declaration of function ‘printf’
> 請問第一行是什麼意思呢?
> 還有要如何解決不明確宣告的問題?
>
> 以下是我的code
> (刪除)
>
> 不好意思麻煩您
> 謝謝

1. main 函數沒有回傳值,預設為 int

main ()
改為
int main()
不管是什麼函數,就算是沒有回傳值,都必需要寫他的回傳類型

2. 你使用了 printf,但沒有在一開始寫 #include<stdio.h>
在某些平台上會直接無法編譯這個程式

3. 這個 worksheet 本身就只有一筆測資,每筆 1 分,所以已經是滿分了

曹佐碩

unread,
Sep 16, 2010, 11:00:03 PM9/16/10
to NTUCSIE C2010
2010/9/16 <b999...@ntu.edu.tw>
- Hide quoted text -

助教您好
我是資工21號的李昌鴻

請問那要同時用<stdio.h>跟<math.h>時該怎麼辦呢??


不好意思麻煩您
謝謝

-----

分別在不同行打上 #include <stdio.h> 和 #include <math.h>
像這樣:

#include<stdio.h>
#include<math.h>

int main(){}

逼玖玖玖零貳零陸柒

unread,
Sep 17, 2010, 12:51:41 AM9/17/10
to NTUCSIE C2010
既然沒有回傳值
需要寫return嗎?

曹佐碩

unread,
Sep 17, 2010, 2:52:41 AM9/17/10
to NTUCSIE C2010
return 可以寫也可以不寫,main(){} 前面不加 int 也可以
關於這些在講到函數的函數值(回傳值)時會有更清楚的介紹
目前寫 main(){} 就可以了

On Sep 17, 8:51 am, 逼玖玖玖零貳零陸柒 <bill8...@gmail.com> wrote:
> 既然沒有回傳值
> 需要寫return嗎?

曹佐碩

unread,
Sep 17, 2010, 1:29:07 PM9/17/10
to NTUCSIE C2010
遇到
warning: ignoring return value of ‘scanf’, declared with attribute
warn_unused_result
時該怎麼處理?

---
是指這個 scanf 函數的函數值被忽略
因為我們沒有需要用到它的回傳值
所以不管這個也沒關係
大部份時間我們也很少用到它

r999...@ntu.edu.tw

unread,
Sep 17, 2010, 2:18:34 PM9/17/10
to ntucsi...@googlegroups.com
助教你好,請問有辦法不讓google groups的訊息寄到信箱嗎?

因我會固定上group去看。謝謝。

引述 曹佐碩 <realt...@gmail.com>:

a1991...@hotmail.com.tw

unread,
Sep 17, 2010, 2:29:29 PM9/17/10
to NTUCSIE C2010

助教您好
我是資工21號的李昌鴻

針對上一個問題,我在執行程式時是可以的,但po上去是0分
問題如下
source.c: In function ‘main’:
source.c:5: warning: ignoring return value of ‘scanf’, declared with
attribute warn_unused_result
source.c:6: warning: ignoring return value of ‘scanf’, declared with
attribute warn_unused_result

a1991...@hotmail.com.tw

unread,
Sep 17, 2010, 2:32:00 PM9/17/10
to NTUCSIE C2010

On 9月17日, 下午10時29分, "a1991103...@hotmail.com.tw"

我的code會寄到您的信箱

曹佐碩

unread,
Sep 17, 2010, 11:09:32 PM9/17/10
to NTUCSIE C2010
請到 groups.google.com.tw/group/ntucsie-c2010/subscribe 這裡設定

On Sep 17, 10:18 pm, r99944...@ntu.edu.tw wrote:
> 助教你好,請問有辦法不讓google groups的訊息寄到信箱嗎?
>
> 因我會固定上group去看。謝謝。
>

> 引述 曹佐碩 <realtur...@gmail.com>:

曹佐碩

unread,
Sep 17, 2010, 11:36:14 PM9/17/10
to NTUCSIE C2010
1. 請提問的時候寫出題號,方便我查


2. 如果你是指 Worksheet3.3 的話
你只印數字並不符合題目要求
需要印出類似下面這行的輸出
The number of days in 2009/9 is 30.
而不是一個單純的 "%d"

你可以試試看 printf("%d Hello there %d \n", 15, 20);
應該會有所幫助
常常會有很多程式沒過的原因是輸出格式不合
請多注意


3. 這個警告


warning: ignoring return value of 'scanf', declared with attribute
warn_unused_result

通常不是造成程式錯誤的原因,除非你讀取測資的格式和輸入不合
例加 int a; scanf("%d", &a); 題目卻給英文字母 a 之類

On Sep 17, 10:29 pm, "a1991103...@hotmail.com.tw"

曹佐碩

unread,
Sep 21, 2010, 2:05:37 PM9/21/10
to NTUCSIE C2010
2010/9/21 <b999...@ntu.edu.tw>
請問一下worksheet2.5的i.j
是使用者輸入時要由小到大輸入
還是任意輸入呢?
---

from i to j, where i < j. 並假設輸入第一個就是 i, 第二個是 j

曹佐碩

unread,
Sep 29, 2010, 12:39:49 PM9/29/10
to NTUCSIE C2010
上課時有提到的如何讀一個未知長度的陣列如下:

#include <stdio.h>
main(){
int array[20], n = 0;
int i;
while( scanf("%d", &array[n]) == 1)
n ++ ;
for(i=0; i<n; i++)
process array[i];
}

使用檔案輸入在上次上課的投影片裡

dev-c 設定路徑: http://ppt.cc/NB!(
http://www.csie.ntu.edu.tw/~r98922165/C20100923.ppt
http://www.csie.ntu.edu.tw/~r99922038/gvim.pptx

b999...@ntu.edu.tw

unread,
Oct 1, 2010, 11:39:14 AM10/1/10
to ntucsi...@googlegroups.com
引述 曹佐碩 <realt...@gmail.com>:

> 上課時有提到的如何讀一個未知長度的陣列如下:
>
> #include <stdio.h>
> main(){
> int array[20], n = 0;
> int i;
> while( scanf("%d", &array[n]) == 1)
> n ++ ;
> for(i=0; i<n; i++)
> process array[i];
> }
>

但是dev-c++偵錯說process是還沒宣告的函數?


蔡青樺

unread,
Oct 1, 2010, 12:15:18 PM10/1/10
to NTUCSIE C2010
On 10月1日, 下午7時39分, b99902...@ntu.edu.tw wrote:
> 引述 曹佐碩 <realtur...@gmail.com>:

process array[i];這行的意思是:
1. 未知長度的陣列array[]已經在前一個迴圈讀取完畢
2. 可以在process array[i];這行的位置開始處理已經讀進來的陣列


我把之前的例子修稍微改,希望可以變得更容易理解:

#include <stdio.h>
main(){
int array[20], n = 0;
int i;
while( scanf("%d", &array[n]) == 1)
n ++ ;

/*
未知長度的陣列array[]已經在前一個迴圈讀取完畢
從這裡開始撰寫處理array[]的程式碼
*/

}

Reply all
Reply to author
Forward
0 new messages