从scanf读取换行符

时间:2015-10-15 12:28:20

标签: c++ newline scanf

我试图从stdin获取输入,逐行使用scanf,但是当只输入换行符时我需要执行特定的功能。 Scanf似乎没有正确地做到这一点,我不能使用fgets,因为程序的其余部分似乎停止工作。帮助

char input[1000];
scanf("%s", input);

if((strcmp(input, "\n") == 0) {
// some code
} 

似乎没有用。 我只需要在只有换行符而没有其他内容时实现它。感谢

2 个答案:

答案 0 :(得分:0)

您可以逐行阅读scanf。如果仅输入新行char(即用户按下enter键),则会出现一条您可以处理的空行。试试这个:

char input[1024];
while (scanf("%1023[^\n]\n", input) == 1) {
    if (input[0] == '\0') {
        // handle empty line
        continue;
    }
    // handle non-empty line
}

在这种情况下,输入将始终以空值终止,并且不包含'\n'。注意scanf如何只允许读取缓冲区大小允许的字符数减去最后的空字符。成功时scanf也会返回它设法扫描的变量数。在这种情况下为1。

答案 1 :(得分:0)

使用std::stringstd::getlinestd::basic_string::empty我们可以在循环中运行输入,如果用户只是按Enter键而不输入任何文本,我们就可以检测到并调用函数。在这个例子中,我只是结束循环,没有输入任何内容。

void no_input()
{
    std::cout << "You did not enter anything";
}

int main() {
    bool keep_going = true;
    while (keep_going)
    {
        std::string foo;
        std::cout << "Enter command: ";
        std::getline(std::cin, foo);
        if (foo.empty())
        {
            no_input();
            keep_going = false;
        }
    }
}

Live Example