[問題] do while新手疑問

看板C_and_CPP (C/C++)作者 (JJ)時間15年前 (2011/04/18 22:33), 編輯推噓2(2036)
留言38則, 6人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 問題(Question): 輸入3位數字xxx 必須百位數和各位數相同 否則繼續輸入 餵入的資料(Input): #include "stdafx.h" #include<stdio.h> #include<stdlib.h> int _tmain(int argc, _TCHAR* argv[]) { int i=0; int n,a,b,c; do { printf("請任意輸入含對稱性質且長度為3之數值:"); scanf("%d",&n); a=n/100; b=n/10-(a*10); c=n-(a*100)-(b*10); printf("%d%d%d\n",a,b,c); if((n<=999)&&(n>=100)&&(a=c)) i=1; else i=0; }while(i>0); printf("%d%d%d",b,a,b); system("pause"); return 0; } 預期的正確結果(Expected Output): 例如輸入131 輸出應為313 錯誤結果(Wrong Output): 但是程式在進入輸入數值時 有時會變成迴圈會變無窮 有時一輸入數值就停止了 補充說明(Supplement): 已經看到眼花不知道哪裡出問題@@ 請高手幫幫忙...謝謝 -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.249.188.226

04/18 22:35, , 1F
%1d
04/18 22:35, 1F

04/18 22:38, , 2F
否則他會當成讀一個整數使用
04/18 22:38, 2F

04/18 22:43, , 3F
是指%d%d%d的地方還是全部都要呢?
04/18 22:43, 3F

04/18 22:50, , 4F
if((n<=999)&&(n>=100)&&(a=c)) <---此行有誤
04/18 22:50, 4F

04/18 22:53, , 5F
我看錯了...囧 似乎沒差 但發現另一個... a=c
04/18 22:53, 5F

04/18 22:55, , 6F
是要打成 a==c嗎? 還是假設錯誤?
04/18 22:55, 6F

04/18 22:57, , 7F
你不知道=和==的差別嗎@@" 還有你的if裡面不應該是&&吧?
04/18 22:57, 7F

04/18 22:57, , 8F
還是說 百:a 十:b 個:c 不能這樣假設呢?
04/18 22:57, 8F

04/18 22:59, , 9F
你的n轉成abc的部分應該是沒錯的 我覺得是錯在那個if
04/18 22:59, 9F

04/18 23:01, , 10F
要搞清楚賦值與等號的差別
04/18 23:01, 10F

04/18 23:02, , 11F
將他改成==即可...
04/18 23:02, 11F

04/18 23:02, , 12F
&&不是邏輯運算式使用的嗎?
04/18 23:02, 12F

04/18 23:03, , 13F
== 和=都有嘗試,但是還是有狀況
04/18 23:03, 13F

04/18 23:03, , 14F
04/18 23:03, 14F

04/18 23:03, , 15F
不對 照他的邏輯 應該要用!=而不是==
04/18 23:03, 15F

04/18 23:03, , 16F
而且&&要改成||
04/18 23:03, 16F

04/18 23:04, , 17F
程式跑成功時 有出現一警告: 好像是scanf宣告的關係?
04/18 23:04, 17F

04/18 23:05, , 18F
原po你可能要再好好想一下你的邏輯...問題其實很明顯...
04/18 23:05, 18F

04/18 23:05, , 19F
把判斷n是否是三位數的部份可以用括號再括一層試試看
04/18 23:05, 19F

04/18 23:06, , 20F
你只要把if改成if((n>999)||(n<100)||(a!=c))就可以了y
04/18 23:06, 20F

04/18 23:06, , 21F
warning C4996: 'scanf': This function or variable
04/18 23:06, 21F

04/18 23:06, , 22F
may be unsafe.
04/18 23:06, 22F

04/18 23:08, , 23F
哦 我理解了 請把i=1和i=0對調一下
04/18 23:08, 23F

04/18 23:08, , 24F
你只要把scanf改成他warning所提示的函式就好
04/18 23:08, 24F

04/18 23:11, , 25F
什麼時候scanf會六親不認了...
04/18 23:11, 25F

04/18 23:12, , 26F
因為他是用visual studio,用scanf會有警告
04/18 23:12, 26F

04/18 23:12, , 27F
真的耶~i=0和i=1對調就可以了!
04/18 23:12, 27F

04/18 23:13, , 28F
好像是改成scanf_s就不會有警告了...但這僅限於visual
04/18 23:13, 28F

04/18 23:14, , 29F
奇怪的visual studio...
04/18 23:14, 29F

04/18 23:14, , 30F
對調也是一種作法,但你還是應該要了解原因才行
04/18 23:14, 30F

04/18 23:14, , 31F
所以下面的while條件是回傳而不是停止囉...?
04/18 23:14, 31F

04/18 23:16, , 32F
回傳?停止? while裡面的條件是i>0就繼續留在迴圈的意思阿
04/18 23:16, 32F

04/18 23:16, , 33F
感謝2位大大幫忙^^
04/18 23:16, 33F

04/18 23:17, , 34F
一開始就會錯意,以為要符合裡面條件迴圈才會停止...
04/18 23:17, 34F

04/19 01:08, , 35F
用 string 做會不會比較快啊 ...
04/19 01:08, 35F

04/19 01:10, , 36F
同意樓上
04/19 01:10, 36F

04/19 22:23, , 37F
mod 101 再判斷是否是10的倍數也可以呀
04/19 22:23, 37F

04/20 07:40, , 38F
好sprintf() 不用嗎?
04/20 07:40, 38F
文章代碼(AID): #1Dh4kvq2 (C_and_CPP)
文章代碼(AID): #1Dh4kvq2 (C_and_CPP)