すべて、C++初心者 - 繰り返しループ最初の繰り返しを繰り返す
だから、私はこのことについて本当に頭を悩ましています。私は、ユーザ指定の文字列中のスペース/母音/文字を数える必要のあるプログラムのセクションを持っています。これは、「あなたがすでに授業でカバーしてきたものだけを使うことができるので、誰もそれをしないように教えてくれます」というものの一つです。だから、私はユーザーにテキストを入力させ、センチネルチャーで終わります。この場合は '#'です。このループは、センチネルに遭遇したときに終了することに関して素晴らしい動作をしますが、string [0]に対して2回繰り返し続けます。ここでは、コードです:だから
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!#
出力は次のとおりです。私はプログラム出力に.ATのための文字を持っていた
Below is the text entered by the user:
HHi there, my friend!
Total characters: 21
Total vowels: 5
Total blank spaces: 3
( 0)と.at(1)、それらは私に正しい文字を与える、私はちょうどループが最初のcharのために2回反復して、そして2回目の後にうまく動作する理由を理解できません。それ以外の点では、最初の文字が複製される以外は、カウント/出力は正しくなります。どんな感謝をいただければ幸いです。
このような問題を解決する適切なツールは、デバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低限、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、その問題を再現するためのデバッガ。 –
ようこそスタックオーバーフロー。 [The Tour](http://stackoverflow.com/tour)を読み、[ヘルプセンター](http://stackoverflow.com/help/asking)の資料を参考にしてください。ここに聞いてください。 –
i ++と++ iの違いを考えてみましょう。 –