我正在尝试将句子复制到char
数组中。我尝试在scanf("%[^\n])
声明中使用scanf("%[^\n]\n
和if
,但它不起作用。有人可以帮我解决一下吗?我正在使用C语言。它适用于第一个代码,但不适用于第二个代码。
档案#1
#include <stdio.h>
int main ()
{
char c[10];
printf ("Enter text.\n");
scanf("%[^\n]", c);
printf ("text:%s", c);
return 0;
}
文件#2
#include <stdio.h>
#include <string.h>
int main(void)
{
char command[10];
char c[10];
printf("cmd> ");
scanf( "%s", command);
if (strcmp(command, "new")==0)
{
printf ("Enter text:\n");
scanf("%[^\n]", c);
printf ("text:%s\n", c);
}
return 0;
}
答案 0 :(得分:0)
在%[^\n]
之前加一个空格,如下所示:
#include <stdio.h>
#include <string.h>
int main(void)
{
char command[10];
char c[10];
printf("cmd> ");
scanf( "%s", command);
if (strcmp(command, "new")==0)
{
printf ("Enter text:");
scanf(" %[^\n]", c); // note the space
printf ("text:%s", c);
}
return 0;
}
现在应该可以了。该空间使其消耗先前输入的任何空白。
这是我在没有空格的情况下测试时的输出:
cmd> new
Enter text:text:@
------------------
(program exited with code: 0)
还有空间:
cmd> new
Enter text:test
text:test
------------------
(program exited with code: 0)
答案 1 :(得分:0)
根据scanf函数的手册页,如果使用格式字符串中的[字符],则会抑制前导空格的常规跳过。所以在第一种情况下,它接受所有字符,直到它符合\ n字符;在第二种情况下,在第一次调用scanf函数之后,\ n字符(在第一次调用中按Enter键)仍在输入缓冲区中,因此如果在scanf中使用格式字符串"%[^\n]"
函数,它将一个空字符串读入缓冲区(如前所述,它以这种格式跳过空白区域)。因此,您可以使用格式字符串" %[^\n]"
强制scanf函数跳过空格。