iT邦幫忙

0

新手學c語言求大大解惑

題目:http://140.135.65.53:10080/problem/0/50104

程式碼:https://ideone.com/kQK3BA

印出來會少最後一串字,而我想是因為換行沒存入,那有沒有其他條件可以使最後一串字印出,請大大們解惑

........回錯地方了SORRY
這截圖的方式實在是看了眼睛很痛, 大概推了一下 可能是一開始讀完字串遇到\n的時候, 你的n還是0, 這時輸出的for迴圈不會作用(n-1 = -1)..
結果我還真的漏看了..11行的j已經在一開始的時候就前進一格了 所以確實如你一開始講的 換行就沒進去了Orz, 所以else if那段其實完全不會作用 .. 給了錯誤的方向 十分抱歉
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
海綿寶寶
iT邦大神 1 級 ‧ 2020-11-22 00:40:39

在列37和列38之間插入以下這段
https://ithelp.ithome.com.tw/upload/images/20201122/20001787eCniUA8pIj.png

1
喵凹咿唉思嗯
iT邦研究生 5 級 ‧ 2020-11-22 01:57:37

因為我一開始給錯方向了 所以我決定給個另類的版本
這段程式主要的問題是因為你的運作邏輯是遇到空格或是斷行時就輸出, 讀取的方向是由右至左
所以讀到最後一段字的時候, 因為最後一段字的最左邊沒有空格或斷行讓他觸發輸出, 所以最後一段字不會運作, 這問題用海綿寶寶的方式可以正常解掉, 也就是在所有事情做完之後再把剩的部份再輸出一次

這邊提供另一種方式, 這類問題很常用的技巧, 在你缺的地方預先加上一個分割符號, 在這題來說是空格

前半段的宣告部份改為

    int i=1;
    a[0]=' ';
    while(scanf("%c",&a[i])!=EOF){

後半段初始化改為由一開始

            }
        printf("\n");
        i=1;
        }
 

附上程式

看更多先前的回應...收起先前的回應...

對了, 如果單行最大長度會到你定義的上限, 那定義數也要再+1不然會炸掉

abalun52 iT邦新手 5 級 ‧ 2020-11-22 11:56:58 檢舉

那我後面的stdin就會從a[1]開始存取是嗎

是的, 可以試著讓程式在中途將變數的值跟index print出來看看 應該不難理解

abalun52 iT邦新手 5 級 ‧ 2020-11-22 20:40:36 檢舉

好的謝謝你

我要發表回答

立即登入回答