Re: [問題] scanf的問題

看板C_and_CPP作者 (下象棋)時間15年前 (2010/05/09 17:19), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串6/11 (看更多)
※ 引述《tropical72 (藍影)》之銘言: 謝謝大大的回答! 我的意思主要是像這樣: char s[20]; while(scanf("%s",s))!=EOF) { for(i=0;s[i]!='\0';i++) printf("%c",s[i]); } 此時如果執行時,我一次就輸入 abc def, 此時他會輸出 abc def 那我想說,我想在def背後再加上東西, 我能不能加入一個判斷式, 即 if(s[i]== something)時,我能得知,此時def已完畢 並主動在後面連接一些東西. 可能我想法不太對, 不過還是謝謝各位大大辛苦回答. : 我想你要的是:讓使用者決定資料輸入完沒.. : 比較簡單的方式是類似以下方法: : int sum = 0; : int cnt = 0; : printf("please input a integer:(-1 to exit.)"); : while(scanf("%d", &data)){ : if(data == -1) break; : sum = sum + data; : cnt++; : printf("please input a integer:(-1 to exit.)"); : } : printf("input times:%d\n", cnt); : printf("sum : %d\n", sum); : 一般加上輸入錯誤機制的話可能會長得像這樣 : int temp = 0; : int ret = 0; : int sum = 0; : int cnt = 0; : while(true){ : printf("please input a integer(-1 to exit):"); : ret = scanf("%d",&temp); : if(ret==0) { : printf("輸入錯誤!!請重新輸入\n"); : } : else if(temp!=-1){ : cnt++; : sum+=temp; : } : else{ : printf("輸入結束!!\n"); : break; : } : } : printf("輸入次數:%d\n", cnt); : printf("輸入數字總合:%d\n", sum); : // ======================================= : code 有點醜.. 但可參考.. : ※ 引述《tropical72 (藍影)》之銘言: : : scnaf 回傳值是 "引數成功 match 之數目" : : ex: : : int a1, a2, a3; : : int ret = scanf("%d%d%d", &a1, &a2, &a3); : : 如果使用者輸入 10 22 12 : : 回傳值 ret = 3 : : 如果值用者輸入 10 22 ss : : 最後一個引數沒有 match 到 : : 回傳值 ret = 2 : : 以您的例子 while(scanf("%d", &num) {....} : : 事實上可以看成 : : while(scanf("%d", &nun)!=0) {....} : : 或是 : : while(scanf("%d", &num)==1) {....} : : 是一樣的意思, : : 只要輸入不是正常的整數, 這個迴圈就會停下來 : : 參考.. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.42.55.223

05/10 02:23, , 1F
標準的做法是一次讀一行進來再用 strtok/sscanf 來切
05/10 02:23, 1F

05/10 02:24, , 2F
不過如果是某些情形下是可以耍一些小手段的...
05/10 02:24, 2F

05/10 12:57, , 3F
05/10 12:57, 3F

05/10 12:58, , 4F
這範例並沒有把之後你要做的事丟進 martix
05/10 12:58, 4F
文章代碼(AID): #1BvkwEoB (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
問題
0
6
完整討論串 (本文為第 6 之 11 篇):
問題
2
9
問題
3
11
問題
6
17
問題
1
1
問題
1
7
問題
1
4
問題
0
6
問題
1
3
問題
1
3
問題
-2
14
文章代碼(AID): #1BvkwEoB (C_and_CPP)