c飞 发表于 2019-9-4 11:59:28

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会打印两次

jackz007 发表于 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))                                  ;
}

superbe 发表于 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");

mlxgzzzzzzzZ 发表于 2019-9-4 14:56:52

{:10_266:}pow是不是要math头文件啊

c飞 发表于 2019-9-4 16:47:48

mlxgzzzzzzzZ 发表于 2019-9-4 14:56
pow是不是要math头文件啊

练习的时候自己定义的函数,没有调用math{:7_144:}

c飞 发表于 2019-9-4 16:52:42

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

但是执行的时候如果输入两个字符会输出两个(请重新输入:),没懂怎样让循环时只输出一次结果

c飞 发表于 2019-9-4 17:00:43

jackz007 发表于 2019-9-4 12:25
楼主试试我修改过的代码

输入两个字符会进入死循环{:10_266:},将fflush(stdin)改为getchar()过后和之前的结果一样

superbe 发表于 2019-9-4 20:15:05

本帖最后由 superbe 于 2019-9-4 21:22 编辑

jackz007大神的代码没问题啊,把printf("请输入两个数:");移到for(;;)这行上面就更好了。
页: [1]
查看完整版本: printf 在循环中重复打印