鱼C论坛

 找回密码
 立即注册
查看: 2964|回复: 7

printf 在循环中重复打印

[复制链接]
发表于 2019-9-4 11:59:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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会打印两次
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-4 12:25:53 | 显示全部楼层
      楼主试试我修改过的代码
#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))                                  ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-4 12:39:05 | 显示全部楼层
本帖最后由 superbe 于 2019-9-4 12:42 编辑

你是说while循环里的printf吗
scanf函数返回值是正确转换的个数,如果输入的是两个字符,比如字母m n,它们不能按%d格式转换为整数,scanf返回值是0,所以while (scanf("%d%d", &a, &b)!=2)会继续循环,再次执行printf("请重新输入:\n");
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-4 14:56:52 | 显示全部楼层
pow是不是要math头文件啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-4 16:47:48 | 显示全部楼层
mlxgzzzzzzzZ 发表于 2019-9-4 14:56
pow是不是要math头文件啊

练习的时候自己定义的函数,没有调用math
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-4 16:52:42 | 显示全部楼层
superbe 发表于 2019-9-4 12:39
你是说while循环里的printf吗
scanf函数返回值是正确转换的个数,如果输入的是两个字符,比如字母m n,它 ...

但是执行的时候如果输入两个字符会输出两个(请重新输入:),没懂怎样让循环时只输出一次结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-4 17:00:43 | 显示全部楼层
jackz007 发表于 2019-9-4 12:25
楼主试试我修改过的代码

输入两个字符会进入死循环,将fflush(stdin)改为getchar()过后和之前的结果一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-4 20:15:05 | 显示全部楼层
本帖最后由 superbe 于 2019-9-4 21:22 编辑

jackz007大神的代码没问题啊,把printf("请输入两个数:");移到for(;;)这行上面就更好了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-20 23:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表