请问大家为什么输入顺序变一下,结果就不一样了呢?

CZBKJSJ 2013-05-28 04:22:23
/*
目的:输入一个字符,输入变长。打印输出其正方形的图形
*/
#include <stdio.h>

void fillCharater(int ,char );

int main()
{
int x;
printf("输入要填充的边长:");
scanf("%d",&x);

char c;
printf("输入要填充的字符:");
scanf("%c",&c);

fillCharater(x,c);
printf("\n");

return 0;
}

void fillCharater(int side,char ch)
{
for(int i=1;i<=side;++i)
{
for(int j=1;j<=side;++j)
{
printf("%c",ch);
}
printf("\n");
}
}



[/code]/*
目的:输入一个字符,输入变长。打印输出其正方形的图形
*/
#include <stdio.h>

void fillCharater(char ,int );

int main()
{
char c;
printf("输入要填充的字符:");
scanf("%c",&c);

int x;
printf("输入要填充的边长:");
scanf("%d",&x);

fillCharater(c,x);
printf("\n");

return 0;
}

void fillCharater(char ch,int side)
{
for(int i=1;i<=side;++i)
{
for(int j=1;j<=side;++j)
{
printf("%c",ch);
}
printf("\n");
}
}[/code]为什么这两个程序仅仅变换一下输入字符与边长。输出地结果截然不同呢?请大家帮帮呀……
...全文
164 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
vuqrzk5w 2013-05-29
  • 打赏
  • 举报
回复
引用 4 楼 CZBKJSJ 的回复:
[quote=引用 2 楼 vuqrzk5w 的回复:] /* 目的:输入一个字符,输入变长。打印输出其正方形的图形 */ #include <stdio.h> void fillCharater(int ,char ); int main() { int x; printf("输入要填充的边长:"); scanf("%d",&x); getchar(); char c; printf("输入要填充的字符:"); scanf("%c",&c); fillCharater(x,c); printf("\n"); return 0; } void fillCharater(int side,char ch) { for(int i=1;i<=side;++i) { for(int j=1;j<=side;++j) { printf("%c",ch); } printf("\n"); } }测试通过
不会吧,我用vc6.0始终无法测试过哎……,你用什么编译器的啊?[/quote]codeblocks 你这个是C语言,不是C++,VS那一套,自从80年代就没更新过对C语言的支持……
hugett 2013-05-29
  • 打赏
  • 举报
回复

/*
目的:输入一个字符,输入变长。打印输出其正方形的图形
*/
#include <stdio.h>

void fillCharater(int ,char );

int main()
{	
	int x;
	printf("输入要填充的边长:");
	scanf("%d",&x);

	while(getchar()!='\n');//加上这一句把换行符读掉。。
	char c;
	printf("输入要填充的字符:");
	scanf("%c",&c);

	fillCharater(x,c);
	printf("\n");

	return 0;
}

void fillCharater(int side,char ch)
{
	for(int i=1;i<=side;++i)
	{
		for(int j=1;j<=side;++j)
		{
			printf("%c",ch);			
		}
		printf("\n");
	}	
}
自信男孩 2013-05-29
  • 打赏
  • 举报
回复

scanf("%d",&x);
    char c;
    printf("输入要填充的字符:");
    scanf("%c",&c);
主要是先输入长度时,缓冲区里有垃圾数据(这个垃圾数据就是'\n'符),然后该垃圾数据就被变量c接收,所以会有问题。 如果先输入长度可以再输入字符时改成:
scanf("%*c%c", &c);
建议你试一试。当然也可以在输入长度后在后面加上一句getchar();
赵4老师 2013-05-29
  • 打赏
  • 举报
回复
单步调试和设断点调试是程序员必须掌握的技能之一。
be_yourself_fan 2013-05-28
  • 打赏
  • 举报
回复
引用 5 楼 CZBKJSJ 的回复:
引用 3 楼 lilin_colin 的回复:
没错啊!!! 如果你先输入,边长再输入字符,这样肯定会变化的啊!这程序写的很简单,不可能会自动识别数字和字符,然后把数字赋值给x,字符赋值给c
这个我知道,关键是我用VC6.0就是无法得到正确的结果……
vuqrzk5w和你的程序不同,你可能没注意到,你那程序输入有问题 printf("输入要填充的边长:"); scanf("%d",&x); getchar();
guotianyu2000 2013-05-28
  • 打赏
  • 举报
回复
主要是输入输出缓冲区问题,在输入边长之后留下了换行符在缓冲区内,直接填充到接下来的填充字符中了。要避免这个问题可以在读填充字符时先过滤掉换行符,如
scanf("%d",&x);后添加getchar()或fflush(stdin)
,或者将
scanf("%c",&c);改成scanf(" %c",&c);
CZBKJSJ 2013-05-28
  • 打赏
  • 举报
回复
引用 3 楼 lilin_colin 的回复:
没错啊!!! 如果你先输入,边长再输入字符,这样肯定会变化的啊!这程序写的很简单,不可能会自动识别数字和字符,然后把数字赋值给x,字符赋值给c
这个我知道,关键是我用VC6.0就是无法得到正确的结果……
CZBKJSJ 2013-05-28
  • 打赏
  • 举报
回复
引用 2 楼 vuqrzk5w 的回复:
/* 目的:输入一个字符,输入变长。打印输出其正方形的图形 */ #include <stdio.h> void fillCharater(int ,char ); int main() { int x; printf("输入要填充的边长:"); scanf("%d",&x); getchar(); char c; printf("输入要填充的字符:"); scanf("%c",&c); fillCharater(x,c); printf("\n"); return 0; } void fillCharater(int side,char ch) { for(int i=1;i<=side;++i) { for(int j=1;j<=side;++j) { printf("%c",ch); } printf("\n"); } }测试通过
不会吧,我用vc6.0始终无法测试过哎……,你用什么编译器的啊?
绯红女王 2013-05-28
  • 打赏
  • 举报
回复
没错啊!!! 如果你先输入,边长再输入字符,这样肯定会变化的啊!这程序写的很简单,不可能会自动识别数字和字符,然后把数字赋值给x,字符赋值给c
vuqrzk5w 2013-05-28
  • 打赏
  • 举报
回复
/* 目的:输入一个字符,输入变长。打印输出其正方形的图形 */ #include <stdio.h> void fillCharater(int ,char ); int main() { int x; printf("输入要填充的边长:"); scanf("%d",&x); getchar(); char c; printf("输入要填充的字符:"); scanf("%c",&c); fillCharater(x,c); printf("\n"); return 0; } void fillCharater(int side,char ch) { for(int i=1;i<=side;++i) { for(int j=1;j<=side;++j) { printf("%c",ch); } printf("\n"); } }测试通过
whizer 2013-05-28
  • 打赏
  • 举报
回复
程序就是要输入变化输出也变化,你想怎么做?不管输入什么输出都一样?

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧