所以我一直在絞盡腦汁關於這個。我有一段程序需要計算用戶指定字符串中的空格/元音/字符。這是其中一種「教會你沒有人會這樣做的方式,因爲你只能使用我們在課堂上已經講過的」各種作業。所以我有用戶輸入一個文本,以一個哨兵字符結尾,在這種情況下是'#'。該循環在遇到哨兵時退出時非常有效,但它在字符串[0]上繼續迭代兩次。下面的代碼:
i = 0;
characterToBeProcessed = userInputText.at(i);
while (characterToBeProcessed != LOOP_SENTINEL)
{
fout << characterToBeProcessed;
// Convert to lowercase
characterToBeProcessed =
static_cast<char> (tolower(characterToBeProcessed));
// Increment character counters
switch (characterToBeProcessed)
{
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
totalVowelCount++;
totalCharacterCount++;
break;
case ' ':
totalSpaceCount++;
totalCharacterCount++;
break;
default:
totalCharacterCount++;
break;
}
characterToBeProcessed = userInputText.at(i++);
}
所以,當我在提示符下輸入:
"Please input a text to be analyzed, ending with the # character: "
Hi there, my friend!#
輸出是:
Below is the text entered by the user:
HHi there, my friend!
Total characters: 21
Total vowels: 5
Total blank spaces: 3
我已經有計劃輸出.AT的字符( 0)和.at(1),那些給我正確的字符,我只是無法弄清楚爲什麼循環爲第一個字符迭代兩次,然後在第二次通過後正常工作。除了第一個字符被複制之外,計數/輸出是正確的。任何讚賞將不勝感激。
解決此類問題的正確工具是您的調試器。在*堆棧溢出問題之前,您應該逐行執行您的代碼。如需更多幫助,請閱讀[如何調試小程序(由Eric Lippert撰寫)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,您應該\編輯您的問題,以包含一個[最小,完整和可驗證](http://stackoverflow.com/help/mcve)示例,該示例再現了您的問題,以及您在調試器。 –
歡迎來到Stack Overflow。請花些時間閱讀[The Tour](http://stackoverflow.com/tour),並參閱[幫助中心](http://stackoverflow.com/help/asking)中的資料,瞭解您可以在這裏問。 –
考慮i ++和++ i之間的差異。 –