0

好的,我是编程新手,需要一点帮助。我有一个程序,它接受一个输入的句子并显示单词和元音的数量。然后,如果用户愿意,我想重复该程序,但是当我使用 do-while 循环时,会陷入无限循环。在我输入“Y”重复之后,它会循环回来显示我为前一个句子输入的元音和单词数。

这是我的代码:

#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <conio.h>

using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
    char sentence[50];
    int countA=0, countE=0, countI=0, countO=0, countU=0, countSP=0;
    char repeat;

    do {
    cout << "Enter sentence : ";
    cin.get(sentence, 50, '\n'); cin.ignore(10, '\n');


    cout << sentence;
    cout << "\nThird character is : " << sentence[2];
    cout << "\nLast character is : " << sentence[strlen(sentence)-1];
    cout << "\nLength of sentence is : " << strlen(sentence);

    for(int x=0; x < strlen(sentence); x++) {
        char ch = tolower (sentence[x]);
        switch (ch) {
        case 'a':   countA++;break;
        case 'e':   countE++;break;
        case 'i':   countI++;break;
        case 'o':   countO++;break;
        case 'u':   countU++;break;
        case ' ':   countSP++;break;
        }
    }


    cout << "\nNumber of A's : " << countA;
    cout << "\nNumber of E's : " << countE;
    cout << "\nNumber of I's : " << countI;
    cout << "\nNumber of O's : " << countO;
    cout << "\nNumber of U's : " << countU;
    cout << "\nNumber of words : " << countSP+1;

    cout << "\n\nWould you like to enter a new sentence? (Y/N): ";
    cin >> repeat;

    }while (repeat == 'y' || repeat == 'Y');

    _getche();
    return 0;
}
4

5 回答 5

3

该表达式(repeat == 'y' && repeat == 'Y')始终等于 false,因为repeat不能同时等于'y' 'Y'

你的意思可能是:

(repeat == 'y' || repeat == 'Y');
于 2013-11-04T17:07:14.923 回答
1

要记住的主要事情是 C++ 执行所谓的短路评估。如果 && 条件的一侧为假,那么一切都是假的。例如,

int y = 1;
int x = 2;
if (y == 0 && x ==2) {
....
}

它只是要检查第一部分。由于 y = 1,它将返回一个 false 布尔值,并且这个 if 语句将永远不会被执行。

同样,使用 or,||,如果条件的一侧为真,则条件将返回 True 布尔值,然后条件将被执行。

对于您的情况,正确的方法是:

(repeat == 'Y' || repeat == 'y');

这样,如果第一方为真,则条件满足并执行。

于 2015-02-08T18:54:27.710 回答
1

更改(repeat == 'y' && repeat == 'Y');(repeat == 'y' || repeat == 'Y');

编辑:你也没有大括号来打开或关闭你的循环试试这个。

while (repeat == 'y' || repeat == 'Y')
   {
      _getche();
   }

因为循环没有主体,也不知道要执行什么。

EDIT2 为什么不这样做?

using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
     do while (repeat == 'y' || repeat == 'Y') {
     Enter()
     cout << "\n\nWould you like to enter a new sentence? (Y/N): ";
     cin >> repeat;
}

}
return 0;

Enter(){
    char sentence[50];
    int countA=0, countE=0, countI=0, countO=0, countU=0, countSP=0;
    char repeat = Y;

cout << "Enter sentence : ";
cin.get(sentence, 50, '\n'); cin.ignore(10, '\n');


cout << sentence;
cout << "\nThird character is : " << sentence[2];
cout << "\nLast character is : " << sentence[strlen(sentence)-1];
cout << "\nLength of sentence is : " << strlen(sentence);

for(int x=0; x < strlen(sentence); x++) {
    char ch = tolower (sentence[x]);
    switch (ch) {
    case 'a':   countA++;break;
    case 'e':   countE++;break;
    case 'i':   countI++;break;
    case 'o':   countO++;break;
    case 'u':   countU++;break;
    case ' ':   countSP++;break;
    }



cout << "\nNumber of A's : " << countA;
cout << "\nNumber of E's : " << countE;
cout << "\nNumber of I's : " << countI;
cout << "\nNumber of O's : " << countO;
cout << "\nNumber of U's : " << countU;
cout << "\nNumber of words : " << countSP+1;

repeat = ' ';
}
于 2013-11-04T17:07:37.133 回答
1

尝试用 替换repeat == 'y' && repeat == 'Y'repeat == 'y' || repeat == 'Y')因为代码中的条件永远不会为真。

于 2013-11-04T17:08:08.670 回答
0

您需要repeat在循环开始时设置除Yor以外的任何内容y(例如 : repeat = NULL;

于 2013-11-04T17:46:48.320 回答