C ++如果那么其他条件被跳过

时间:2015-09-22 21:08:16

标签: c++

我正在为课堂写一个程序。它需要一个句子并将其翻译成伪日语(使用英语单词但重新排列成语法顺序并将后缀添加到相关单词中)。

库是有限的,我们不能使用函数或数组(低级别)。在这种情况下,我输入句子:

“是男人红”(没有引号)

程序正确解析单词。即每个单词周围都没有空格。

这是我的代码

if (word1 == "is")
{
    question = "is-ka";

    //If the second word is a subject, assign it and continue
    //assigning the 3rd or 4th word as the object or adjective and kick out
    //an error if not
    if (word2 == string("man") || word2 == string("woman") || word2 == string("fish"))
    {
        subject = word2 + "-ga";

        if (word3 == "man" || word3 == "woman" || word3 == "fish")
        {
            object = word3 + "-o";
            sentence = subject + ' ' + object + ' ' + question;
            cout << sentence << endl;
        }
        if (word3 == "red" || word3 == "short" || word3 == "strong")
        {
            adj = word3;
            sentence = subject + ' ' + adj + ' ' + question;
            cout << sentence << endl;
        }
        else
        {
            cout << "This is not a proper Eng-- sentence." << endl;
            cout << "2 The sentence lacks a proper object." << endl;
        }
    }

我测试第一个单词是'是',因为这是我们给出的唯一问题格式。鉴于这是一个问题,我继续找到必须在句子中的主语,宾语和形容词,以使其在语法上正确。

第一个和第二个条件为“是男人红”通过,但是 当“是男人红”的条件测试时,如果第三个单词是“红色”,它会跳到else语句并显示错误。

为什么条件跳过应该是真的?

跑步示例:

Enter an Eng-- sentence you would like to translate
is man red 

These are the words collected
Spaces after the colons and period at end of word are added.
First word: is.
Second word: man.
Third word: red.

This is not a proper Eng-- sentence.
2 The sentence lacks a proper object.

我希望这就是你们一直要求的。完整代码并使用上面的输入进行编译

http://ideone.com/qPgM14

1 个答案:

答案 0 :(得分:2)

这里的问题是word3并没有以一种特别令人困惑的方式包含它看起来的确切内容。读入它的代码看起来像这样

//Word 3
   while(userSent[index] != ' ' && index <= sentLength)
    {
        word3 += userSent[index];
        index++;
    }

条件index <= sentLength应该是index < sentLength,因为C ++字符串的从零开始索引。使用<=循环体还会将userSent的终止零字节附加到word3。您可以通过查看word3.length()来了解这种情况。使用cout&#39; s operator<<打印字符串时,额外的0字节无效,但它确实阻止字符串与"red"相等。