程序的不同行为
问题描述:
这是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循环空格。
答
您应该查找返回值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。
必须有大量的(工作)例子在那里......你必须添加一些突破while循环的方法,比如当发生什么事情或者一个不同的while条件时,实际评估一些变量。 – 2012-08-09 12:50:59
不要为了上帝的爱而使用scanf! – 2012-08-09 12:52:08
你提供了程序的输出,但是你对程序的输入是什么?程序运行在哪个操作系统上? – 2012-08-09 13:06:00