我无法解决这个问题。我需要用户输入一个字符串,然后按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);
}
如果我点击输入它什么都不做。 还有其他方法吗?
答案 0 :(得分:3)
是的,scanf
实际上在寻找角色。你想要的是gets
(获得一条线)。
gets
已经(最后)从语言中删除了。甚至以前, man page已经很长时间了从不使用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... */
}
答案 1 :(得分:-1)
除了paddy指出的(使用得到整行),条件
while(*buff);
除非用户输入为空字符(如ASCII值0),否则将永远不会为false。换行符(\ n)的ASCII值为10,在条件语句中的计算结果为true
。
试试这个:
while(strlen(*buff) > 0);