[問題] 陣列中找值問題

看板C_and_CPP (C/C++)作者 (Redemption Ark)時間15年前 (2011/03/31 01:00), 編輯推噓3(3010)
留言13則, 5人參與, 最新討論串1/1
#include<stdlib.h> #include<stdio.h> int main(void){ int i,x,j; int a[]={0,31,0,83,0,15,0,27,77,68}; printf("請輸入一個數字:"); scanf("%d",&x); for(i=0;i<10;i++){ if(a[i]==x){ printf("找到了,在位址a[%d]\n",i); } } printf("沒找到\n"); system("pause"); return 0; } 首先輸入一個數字 找有沒有跟陣列中一樣的數值 有的話就printf("找到了,在位址a[%d]\n",i); 阿可是他還是會printf("沒找到\n"); 要怎麼不讓他執行printf("沒找到\n"); 有找到話 沒找到的話是沒問題 最後就printf("沒找到\n"); 現在問題就在有找到一樣的數值的話,不要讓他printf("沒找到\n") -- 如果是上帝創造了世界,那麼祂在創世之前究竟在哪裡? ......要知道,世界並不是創造出來的, 時間本身亦復如是,無始亦無終。 (Mahapurana,印度,第九世紀) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.169.78.234

03/31 01:02, , 1F
你需要的是 else
03/31 01:02, 1F

03/31 01:05, , 2F
if (i==10) printf("沒找到\n");
03/31 01:05, 2F

03/31 01:05, , 3F
這其實也是一個困擾我很久的問題
03/31 01:05, 3F

03/31 01:05, , 4F
我一直覺得這樣的寫法很ugly,但是這種情況說真的很常見
03/31 01:05, 4F

03/31 01:05, , 5F
....看到二樓才發現我搞錯了,請無視一樓的推文 orz
03/31 01:05, 5F

03/31 01:06, , 6F
就是要檢查「迴圈是不是有完整跑完」這件事
03/31 01:06, 6F

03/31 01:07, , 7F
喔對了 你找到之後要break不然他永遠都會i==10
03/31 01:07, 7F

03/31 01:10, , 8F
我個人會把找的迴圈單獨形成一個 subroutine, 回傳 bool
03/31 01:10, 8F

03/31 01:26, , 9F
http://pastie.org/1735908 之前小研究過,覺得這還不錯
03/31 01:26, 9F

03/31 01:28, , 10F
for(i=0; i!=N && a[i]!=x; ++i);
03/31 01:28, 10F

03/31 01:28, , 11F
可以更潔簡,但不是每個人都喜歡簡潔.
03/31 01:28, 11F

03/31 01:30, , 12F
看程式碼是找多個相等值...
03/31 01:30, 12F

03/31 01:32, , 13F
的確誤會了,多一個flag應是跑不掉.
03/31 01:32, 13F
文章代碼(AID): #1Das6nrM (C_and_CPP)
文章代碼(AID): #1Das6nrM (C_and_CPP)