iT邦幫忙

0

(C)為何我程式碼print不出來

rk97 2022-12-09 15:49:421455 瀏覽
  • 分享至 

  • xImage

題目為:求陣列中第一個0值之前所有元素的總和
程式碼如下:

#include<stdio.h>
int main(){
	int i, sum=0;
	int arr[10]= {1,2,3,4,5,0,4,3,2,1};
	for(i=0; i<=9; i++){
    	while(arr[i] != 0){
    		sum = sum + arr[i];
		}
	}
	printf("總和為:%d", sum);
	return 0;
} 

不知道哪裡出問題了,我執行後沒有印出任何東西,
希望有人能幫我解答!
或是請問有其他較簡化的解法嗎?
非常感謝!!

淺水員 iT邦大師 6 級 ‧ 2022-12-09 15:54:38 檢舉
貼程式碼方式參考下列連結「多行(Multiple Lines)」的部分:
https://ithelp.ithome.com.tw/markdown#mk_code
小幫手 iT邦新手 5 級 ‧ 2022-12-19 21:44:37 檢舉
建議學習方式,拿看的懂的教科書先從最基礎的部分,題庫範例一個字一個字KEY進編譯器中,不看答案一個一個範例測試,看所有例題的變化,等熟悉後試著靠自己寫出一個小專題(不用非常難的專題,但都要涵蓋最基本的應用才行)。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
tadpole1999
iT邦新手 3 級 ‧ 2022-12-09 15:59:30
最佳解答

while loop拿掉只留下 sum = sum + arr[i]; 在for loop裡面

你的while loop進入無窮迴圈了且這是沒有必要使用的loop因為
for loop改成這樣即可達到
每一次讀取array的一個值
並且將 sum存入=前一個迴圈的sum的值+上現在讀取array的值且判斷當arr[i]==0的時候就跳脫迴圈

for(i=0; i<=9; i++){
sum = sum + arr[i];
    if(arr[i] ==0){
        break;
     }
}

不知道這樣是否有幫到你

補充一下:
為什麼會進入while loop會進入到無窮迴圈
由於您設的條件是while loop arr[i]!=0 就會執行 sum = sum+arr[i]
也就是說當你的for loop i=0的時候 arr[0] 它確實是會執行sum =sum +arr[0]
你的sum在在這時候確實是arr[0]的值但是你注意看你的while loop條件
第一圈的 for loop i=0
while loop arr[i]不等於0就執行 sum = sum+arr[i] 你這時候的i還是等於0所以您的
while loop會無窮循環 你可以在while loop裡面加上print(sum)就可以看到結果了
如果你想用while loop改寫 下面海綿寶寶大大的已經為您送上很好的範例了。

1
海綿寶寶
iT邦大神 1 級 ‧ 2022-12-09 16:07:11
#include<stdio.h>
int main(){
	int i, sum=0;
	int arr[10]= {1,2,3,4,5,0,4,3,2,1};
	while(arr[i] != 0){
		sum = sum + arr[i];
		i++;
		if (i>9) {
		    break;
		}
	}
	printf("總和為:%d", sum);
	return 0;
}
1
淺水員
iT邦大師 6 級 ‧ 2022-12-09 16:11:56

while 是條件符合時,一直跑迴圈(原程式碼會造成無窮迴圈)
把它改成 if 才是只判斷一次

for(i=0; i<=9; i++){
    if(arr[i] != 0){ // 這邊改 if
        sum = sum + arr[i];
    } else {
        break;
    }
}

其他寫法參考

for(i = 0; i < 10 && arr[i] != 0; i++) {
    sum += arr[i];
}
0
allenlwh
iT邦高手 1 級 ‧ 2022-12-09 16:22:06

求陣列中第一個0值之前所有元素的總和,int arr[10]= {1,2,3,4,5,0,4,3,2,1}
所以只計算1+2+3+4+5,到第6個0時,程式就結束!

for (i = 0; i <= 9; i++)
{
    if (arr[i] != 0)
    {
        sum = sum + arr[i];
    }
    else
    {
        break;
    }
}
0
小幫手
iT邦新手 5 級 ‧ 2022-12-14 02:02:34

#include<stdio.h>
int main(){
int i, sum=0;
int arr[10]= {1,2,3,4,5,0,4,3,2,1};
for(i=0; i<=9; i++){
while(arr[i] != 0){
sum = sum + arr[i];
printf("總和為:%d", sum); //此行已修改
}
}
return 0;
}

※把輸出項放入迴圈內,就可輸出螢幕了。

我要發表回答

立即登入回答