我试图从stdin获取输入,逐行使用scanf,但是当只输入换行符时我需要执行特定的功能。 Scanf似乎没有正确地做到这一点,我不能使用fgets,因为程序的其余部分似乎停止工作。帮助
char input[1000];
scanf("%s", input);
if((strcmp(input, "\n") == 0) {
// some code
}
似乎没有用。 我只需要在只有换行符而没有其他内容时实现它。感谢
答案 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::string
,std::getline
和std::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;
}
}
}