程序的不同行为

时间:2012-08-09 12:47:35

标签: c scanf

这是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循环从内部带有空格的用户输入。

5 个答案:

答案 0 :(得分: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.

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

#include<stdio.h>
int main ()
{
char name[20];
  do
  {
   gets(name);
   puts(name);
  }while (1);
return 0;
}

答案 3 :(得分:0)

扫描后请使用fflush(stdin) 注意:stfl上的fflush是高度特定于平台的,但通常适用于遇到此问题的平台

答案 4 :(得分:-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;
}

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