scanf() 如何在 printf() 之前执行

bha*_*nsa 1 c

我有以下代码来实现pow()math.h 库中的 as 。嗯,我有两个问题:

  1. "power:"为什么 scanf() 语句在从 printf() 函数打印之前获取输入?
  2. 我如何计算大整数的幂,假设计算出的幂如下:22235645654789787978797797(仅作为示例)。我如何计算并打印它。

    #include <stdio.h>
    unsigned long long int pow(unsigned long long int n,unsigned long long int d);
    int main(){
    
    unsigned long long int a,x,n;
    printf("Number:");
    scanf("%u\n",&a);
    printf("power:");
    scanf("%u\n",&n);
    x = pow(n,a);
    printf("%u\n",x);
    }
    unsigned long long int pow(unsigned long long int n,unsigned long long int d){
    if(n+1==1)
        return 1;
    return d*pow(n-1,d);
    }
    
    Run Code Online (Sandbox Code Playgroud)

图像

在图像中,您可以看到变量的输入在从 printf()n打印之前获取输入"power:",因此无论您输入什么输入。

请帮助我理解它。欢迎任何建议和意见。

das*_*ght 5

你的printfs 和scanfs 是按顺序执行的。由于缓冲,输出看起来很混乱。

"power:"被打印时,它最终会进入缓冲区,直到输入数字为止不会被刷新。添加\n解决了控制台输出的问题。您还可以fflush(STDOUT)显式调用将缓冲的字符串打印到屏幕上。

注意:您没有unsigned long long正确阅读/打印。使用llu,或参阅此问答以了解 64 位无符号整数的正确格式说明符:

unit64_t a, x;
...
scanf("%"SCNu64, &a);
printf("n: %"PRIu64"\n", x);
Run Code Online (Sandbox Code Playgroud)