如何将句子复制到char数组中

时间:2014-04-05 00:08:51

标签: c arrays char

我正在尝试将句子复制到char数组中。我尝试在scanf("%[^\n])声明中使用scanf("%[^\n]\nif,但它不起作用。有人可以帮我解决一下吗?我正在使用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;
}

2 个答案:

答案 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函数跳过空格。