gpt4 book ai didi

c - 读取无限数量的行,直到用户在 C 中按回车键(两次)

转载 作者:行者123 更新时间:2023-11-30 14:23:47 25 4
gpt4 key购买 nike

我无法解决这个问题。我需要用户输入一个字符串,然后按 Enter 键,然后输入另一个字符串。当他/她完成后,再次按回车键(最后一个字符串只有\n 字符,所以我知道何时停止)。

char * buff = malloc (100);

printf("Type in strings, to finish hit enter\n");

do{
scanf (" %[^\n]",buff);
//do some other stuff with the string
} while(*buff);

printf("You have finished typing strings\n");

我想出的这种方法对我来说没有用,因为 [^\n] 命令告诉函数读取除\n 之外的所有内容,这意味着\n 保留在控制台缓冲区中。如果我只是这样做

while(*buff)
{
scanf ("%s",buff);
}

如果我按回车键,它什么也不做。还有其他方法吗?

最佳答案

是的,scanf实际上是在寻找字符。您想要的是 gets (获取一行)。

[编辑]正如 Daniel Fischer 所指出的:

gets has (at last) been removed from the language. Even before, the man page has for a long time said Never use gets()

看来我的建议不是最好的。我想这意味着使用 fgets,因为它可以防止缓冲区溢出。与 gets 不同,换行符也将存储在字符串中,程序员有责任检查它们。

const size_t bufsize = 100;
char buf[bufsize];

while( fgets(buf, bufsize, stdin) != NULL )
{
if( buf[0] == '\n' ) break;

/* Do something with your string... */
}

关于c - 读取无限数量的行,直到用户在 C 中按回车键(两次),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12567149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com