在请求带空格的字符串时循环 scanf

Loop a scanf while asking for a string with spaces

#include <stdio.h>

int main()
{
   char name[100];
   int i;
   for (i=0; i<3;i++){
      printf("\nEnter the name : ");

      scanf("%[^\n]",name);
   }
   printf ("\nName of Student : %s ",name);
}

我希望此代码请求名称 3 次,但它只请求一次,不胜感激。

当您使用时:

scanf("%[^\n]",name);

换行符留在输入流中。当函数被第二次和第三次调用时,scanf 将零个字符读入接收参数。

添加一行以读取并丢弃该行之后的换行符。

getc();
#include <stdio.h>

int main()
{
   char name[100];
   int i;
   for (i=0; i<3;i++){
      printf("\nEnter the name : ");

      scanf ("%[^\n]%*c", name);
  }
  printf ("\nName of Student : %s ",name);
}

[]是扫描集字符。 [^\n] 表示当输入不是换行符 ('\n') 时进行输入。然后使用 %*c 从输入缓冲区读取换行符。

您还可以使用:

scanf(" %[^\n]s",name);