繁体   English   中英

Getline无法正常工作

[英]Getline doesn't work as expected

#include <iostream>
#include <string.h>
using namespace std;

int main()
{
    int order[5];
    string carorder[5];
    int smallest=999999, where;
    string carname[5];
    float carprice[5];
    cout << "Enter car names then prices: ";
        cout << endl;
    for(int i=0; i < 5; i++){
        cin >> carname[i];
        //getline(cin, carname[i]);     can't do this -- why?
        cout << endl;
        cin >> carprice[i];
        cout << endl;
    }
    //BAD ALGORITHM//
       for(int m=0; m<5; m++){
    for(int j=0; j < 5; j++){

        if(carprice[j] < smallest){
            smallest = carprice[j];
            where = j;
        }

    }
    order[m] = smallest;
    carorder[m] = carname[where];
    carprice[where] = 999999;
    smallest = 999999;

   }
   //////////////////////////
    for(int w=0;  w<5; w++){
        cout << endl << "The car: " << carname[w] << " and price: " << order[w];
    }
    //////////////////////////
    return 0;
}

我正在用C ++进行练习,它应该乘汽车及其价格,然后按从最低到最高的顺序返回价格。 挑战在于使用教授给出的算法,所以请不要介意这部分(我认为这是不好的算法)。 我需要知道为什么不能使用getline(cin,carname [i]); 和cin >> carname [i]; 工作正常。 我也尝试使用cin.clear(); 和cin.ignore(); 在热线之前,仍然无法正常工作。 任何帮助表示赞赏。

格式化输入,即使用operator>>() ,将跳过前导空格。 另外,当接收到不适合格式的字符时,它将停止。 例如,当读取float ,输入将读取一个数字并在接收到第一个空格时停止。 例如,它将在用于输入当前值的换行符之前停止。

未格式化的输入(例如,使用std::getline()不会跳过前导空格。 取而代之的是,它将愉快地读取任何等待读取的字符。 例如,如果下一个字符是换行符,则std::getline()会很乐意在该处停止阅读!

通常,当从格式化输入切换为非格式化输入时,您希望摆脱一些空白。 例如,您可以使用std::ws操纵器跳过所有前导空格:

std::getline(std::cin >> std::ws, carname[i]);

您的输入完全未经检查:使用前不检查结果通常是个坏主意! 您可能应该在某个时刻测试流状态,并可能将其恢复到良好状态,以请求正确格式化的数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM