проверка на eof в строке :: getline

Простой оператор else заставляет его работать как

1..100 | ForEach-Object {
    if ($_ % 7 -ne 0 ) { 
        #do nothing
    } else {
        Write-Host "$($_) is a multiple of 7"
    }
}

или в одном конвейере

1..100 | ForEach-Object { if ($_ % 7 -ne 0 ) {} else {Write-Host "$($_) is a multiple of 7"}}

, но более элегантным решением является инвертирование вашего теста и создание вывода за ваши успехи

1..100 | ForEach-Object {if ($_ % 7 -eq 0 ) {Write-Host "$($_) is a multiple of 7"}}
37
задан Jonas 31 March 2017 в 10:58
поделиться

2 ответа

Канонический цикл чтения в C ++:

while (getline(cin, str)) {

}

if (cin.bad()) {
    // IO error
} else if (!cin.eof()) {
    // format error (not possible with getline but possible with operator>>)
} else {
    // format error (not possible with getline but possible with operator>>)
    // or end of file (can't make the difference)
}
53
ответ дан 27 November 2019 в 02:39
поделиться

Просто прочтите, а затем убедитесь, что операция чтения прошла успешно:

 std::getline(std::cin, str);
 if(!std::cin)
 {
     std::cout << "failure\n";
 }

Поскольку сбой может быть вызван рядом причин, вы можете использовать функцию-член eof , чтобы увидеть, что произошло на самом деле EOF:

 std::getline(std::cin, str);
 if(!std::cin)
 {
     if(std::cin.eof())
         std::cout << "EOF\n";
     else
         std::cout << "other failure\n";
 }

getline возвращает поток, чтобы вы могли писать более компактно :

 if(!std::getline(std::cin, str))
12
ответ дан 27 November 2019 в 02:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: