控制台应用程序自动退出C ++

时间:2013-08-05 16:10:36

标签: c++ console-application

我正在制作一个非常简单的程序,只是试图学习c ++作为初学者。它旨在简单地计算短句子中的元音数量和共鸣者数量。在做这件事时,我遇到了一个有趣的小困境。

首先是代码:

    #include <iostream>
    #include <time.h>
    #include <string>


    using namespace std;



    int main()
   {    int vowells = 0, consenants = 0;
char sentence[100];
char alphabet[] = {'a','e','i','o','u','b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z'};
cout << "Please type in a sentence (up to 100 characters max, lower case only): ";

cin >> sentence;
cin.ignore();

cout << "Your sentence was: " << sentence;

for (int i=0; i < sizeof(sentence); i++)
{
    if (sentence[i] == alphabet[0]||sentence[i] == alphabet[1]||sentence[i] == alphabet[2]||sentence[i] == alphabet[3]||sentence[i] == alphabet[4])
    {vowells++;}
    else if (sentence[i] == alphabet[5]||sentence[i] == alphabet[6]||sentence[i] == alphabet[7]||sentence[i] == alphabet[8]||sentence[i] == alphabet[9]||sentence[i] == alphabet[10]||sentence[i] == alphabet[11]||
        sentence[i] == alphabet[12]||sentence[i] == alphabet[13]||sentence[i] == alphabet[14]||sentence[i] == alphabet[15]||sentence[i] == alphabet[16]||sentence[i] == alphabet[17]||sentence[i] == alphabet[18]||
        sentence[19] == alphabet[20]||sentence[i] == alphabet[21]||sentence[i] == alphabet[22]||sentence[23] == alphabet[24]||sentence[i] == alphabet[25])
    {consenants++;}
}

cout << "\nThe number of vowells is: " << vowells;
cout << "\nThe number of consenants is: " << consenants;

cin.get();


    }

抱歉看起来很乱。基本上在cin&gt;&gt;之后句子;我输入cin.ignore()函数来摆脱输入句子后按下的回车键。在函数结束时,cin.get()只是假设作为一个断点,以便程序在关闭之前需要另一个输入。如果我只输入一个没有空格的单词,程序会根据需要运行并在结尾处暂停。如果我用空格放入多个单词,它会立即运行和关闭,而不会让我有时间看到它。我认为这是因为某些原因的空间...虽然我不确定为什么它们会以这种方式影响它。

所以基本上,它是给我解决问题的空间吗?如果是这样我怎么去摆脱它们或者至少让程序忽略它们?

谢谢!

编辑***所以我被告知我可以使用Windows Sleep()命令让它暂停,这很有效。现在的问题是,正如另一个人评论的那样,cin函数只接受第一个单词,并没有考虑句子的其余部分。所以我想我需要摆脱空间或以某种方式使用不同的输入函数来使其正常工作。关于如何做到这一点的任何建议?

2 个答案:

答案 0 :(得分:1)

据我所知,在C ++中没有标准的,跨平台的“睡眠”方式。如果您运行的是Windows,则可以使用以下命令:

#include <windows.h>
int main(){
    //do stuff
    Sleep(1000); // this will "sleep" for 1s (1000ms)
}

如果您不使用Windows,我确信还有Linux / etc替代方案可以做类似的事情。我已经看过你以前用过的方式,但如果它不起作用,这应该是一个不错的选择。例如,您可以使用threads。那可能有用。

答案 1 :(得分:1)

是的,空间给你带来了麻烦。遇到空白字符时,>>停止将字符提取到缓冲区中。因此,如果您有一个单词后跟一个空格,然后是另一个单词,则只需将第一个单词放入缓冲区,只需调用>>。您之后对cin.get的调用已经有一个字符可以从流中读取,因为它们并非全部由>>调用。

getline提供了一种提取空格和其他字符的方法。

  //cin >> sentence;
  //cin.ignore();
  cin.getline(sentence, 100)