程序的不同行为

问题描述:

这是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循环空格。

+0

必须有大量的(工作)例子在那里......你必须添加一些突破while循环的方法,比如当发生什么事情或者一个不同的while条件时,实际评估一些变量。 – 2012-08-09 12:50:59

+0

不要为了上帝的爱而使用scanf! – 2012-08-09 12:52:08

+0

你提供了程序的输出,但是你对程序的输入是什么?程序运行在哪个操作系统上? – 2012-08-09 13:06:00

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

您可以使用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; 
} 

但'得到功能是危险的,不应该被使用。

+1

-1用于提示'gets()',即使您认为它很危险并且不应该使用。 – pmg 2012-08-09 13:04:03

这里的代码dt可能会解决你的prblm,但你应该考虑包括一些检查条件从do while循环中断。希望工程

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

请使用fflush(stdin)后的scanf 注:标准输入fflush是非常具体的平台,但如果你遇到了这个问题一般工作在平台

你可以试试这个方法:

#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。