0

这是C语言中的一个小程序。我想在while循环中获取用户输入,并且我还想在一行中占用空白,所以我使用scanf("%[^\n]s",name);了它,但它给出了不同的输出。它卡在while循环中。

#include <stdio.h>

int main (int argc, char const *argv[])
{
    do
    {
    char name[20];
    scanf("%[^\n]s",name);
    printf("%s\n", name);
    }while (1);
    return 0;
}

输出 :

adAD A SAF A SA FA
adAD A SAF A SA FA
adAD A SAF A SA FA
adAD A SAF A SA FA
adAD A SAF A SA FA
adAD A SAF A SA FA
adAD A SAF A SA FA
adAD A SAF A SA FA
adAD A SAF A SA FA
adAD A SAF A SA FA
adAD A SAF A SA FA
adAD A SAF A SA FA
adAD A SAF A SA FA
adAD A SAF A SA FA
adAD A SAF A SA FA
adAD A SAF A SA FA

我想使用 while 循环从用户那里获取带有空格的输入。

4

5 回答 5

1

你可以这样尝试:

#include<stdio.h>
int main (int argc, char const *argv[])
{
    char name[20];
    while(gets(name))
    {
       printf("%s\n", name);
    }
return 0;

}

如果您想打破输入循环,那么您有两个选项 AFAIK: 1. 如果您在 Windows 中,请按 CTRL+Z。2. 如果您在 Linux 中按 CTRL+D。

于 2015-11-11T19:34:39.153 回答
0

Please use fflush(stdin) after scanf Note: fflush on stdin is highly platform specific, but generally works in platforms where you run into this issue

于 2013-04-26T16:08:50.650 回答
0

您应该寻找scanf函数的返回值并决定break循环。

于 2012-08-09T12:52:22.250 回答
0

这是代码 dt 可能会解决您的 prblm 尽管您应该考虑包含一些检查条件以从 do while 循环中中断。希望它有效

#include<stdio.h>
int main ()
{
char name[20];
  do
  {
   gets(name);
   puts(name);
  }while (1);
return 0;
}
于 2012-08-09T14:14:01.737 回答
-1

您可以使用gets() 来替换scanf(),例如:#include

int main (int argc, char const *argv[])
{
    do
    {
    char name[20];
    //scanf("%[^\n]s",name);
    gets(name);
    printf("%s\n", name);
    }while (1);
    return 0;
}

但是“gets”功能很危险,不应该使用。

于 2012-08-09T13:01:40.143 回答