为什么这个for循环不会中断

时间:2014-12-03 21:19:25

标签: c++ for-loop

我正在使用此资源http://www.learncpp.com/cpp-tutorial/58-break-and-continue/

学习C ++

我希望这个程序在输入命中空格后结束并打印空格类型的数量。相反,您可以根据需要输入任意数量的空格。当您按Enter键时,如果空格数超过5,程序将打印1,2,3,4或5。

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

int main()
{
    //count how many spaces the user has entered
    int nSpaceCount = 0;
    // loop 5 times
    for (int nCount=0; nCount <5; nCount++)
    {
        char chChar = getchar(); // read a char from user

        // exit loop is user hits enter
        if (chChar == '\n')
            break;
        // increment count if user entered a space
        if (chChar == ' ')
            nSpaceCount++;
    }

    std::cout << "You typed " << nSpaceCount << " spaces" << std::endl;
    std::cin.clear();
    std::cin.ignore(255, '/n');
    std::cin.get();
    return 0;
}

4 个答案:

答案 0 :(得分:5)

控制台输入是行缓冲的。在给出Enter之前,库不会将任何输入返回给程序。如果你确实需要逐字符输入,你可能会发现绕过这个的操作系统调用,但如果你这样做,你会跳过有用的东西,比如退格处理。

答案 1 :(得分:2)

你为什么这么做?

// loop 80 times
for (int nCount=0; nCount <5; nCount++)
{

}

如果你只循环5次,那么你就不能添加超过5个空格。也许你的意思是

// loop 80 times
for (int nCount=0; nCount <80; nCount++)
{

}

或只是

while(true)
{

}

答案 2 :(得分:1)

std::cin.clear();
std::cin.ignore(255, '/n');
std::cin.get();

这三行不允许您退出代码,直到cin停止忽略输入。你有&#39; / n&#39;逆转,应该是&#39; \ n&#39;

答案 3 :(得分:1)

我是为你写的:

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

using namespace std;

int main()
{
    int intSpaceCounter = 0;
    string strLine;
    getline(cin,strLine);
    for (int i = 0; i <= strLine.length(); ++i)
    {
        if (strLine[i] == ' ')
        {
            ++intSpaceCounter;
        }
    }
    cout << "You typed " << intSpaceCounter << " spaces.";
    return 0;
}