printf 在循环中重复打印
#include<stdio.h>void main()
{
int pow(int x, int y);
int a, b, c, d;
printf("请输入两个数:");
while (scanf("%d%d", &a, &b)!=2)
{
printf("请重新输入:\n");
getchar();
}
c = pow(a,b);
printf("%d", c);
}
//指数函数定义
int pow(int x, int y)
{
int i, z;
for (i = 1, z = 1; i < y + 1; i++)
{
z = z * x;
}
return z;
}
如果输入的是两个字符printf会打印两次 楼主试试我修改过的代码
#include <stdio.h>
int pow(int x , int y)
{
int i , z ;
for (z = 1 , i = 1 ; i <= y ; i ++) z *= x ;
return z ;
}
main(void)
{
int a , b , c ;
for(;;) {
printf("请输入两个数:") ;
c = scanf("%d%d", & a , & b) ;
fflush(stdin) ;
if(c == 2) break ;
else printf("请重新输入:\n\n") ;
}
printf("%d\n" , pow(a , b)) ;
}
本帖最后由 superbe 于 2019-9-4 12:42 编辑
你是说while循环里的printf吗
scanf函数返回值是正确转换的个数,如果输入的是两个字符,比如字母m n,它们不能按%d格式转换为整数,scanf返回值是0,所以while (scanf("%d%d", &a, &b)!=2)会继续循环,再次执行printf("请重新输入:\n"); {:10_266:}pow是不是要math头文件啊 mlxgzzzzzzzZ 发表于 2019-9-4 14:56
pow是不是要math头文件啊
练习的时候自己定义的函数,没有调用math{:7_144:} superbe 发表于 2019-9-4 12:39
你是说while循环里的printf吗
scanf函数返回值是正确转换的个数,如果输入的是两个字符,比如字母m n,它 ...
但是执行的时候如果输入两个字符会输出两个(请重新输入:),没懂怎样让循环时只输出一次结果 jackz007 发表于 2019-9-4 12:25
楼主试试我修改过的代码
输入两个字符会进入死循环{:10_266:},将fflush(stdin)改为getchar()过后和之前的结果一样 本帖最后由 superbe 于 2019-9-4 21:22 编辑
jackz007大神的代码没问题啊,把printf("请输入两个数:");移到for(;;)这行上面就更好了。
页:
[1]