c - scanf() 在 printf() 之前是如何执行的

标签 c

我有以下代码来实现 pow(),就像在 math.h 库中一样。 那么我有两个问题:

  1. 为什么 scanf() 语句之前接受输入 它从 printf() 函数打印 "power:"?
  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);
    }
    

Image

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

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

最佳答案

您的 printfscanf 按顺序执行。由于缓冲,输出看起来很乱。

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

注意:您没有正确读取/打印 unsigned long long。使用 llu,或查看 this Q&A对于 64 位无符号整数的正确格式说明符:

unit64_t a, x;
...
scanf("%"SCNu64, &a);
printf("n: %"PRIu64"\n", x);

关于c - scanf() 在 printf() 之前是如何执行的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38027623/

相关文章:

c - fork() 之后 execv() 的 Echo 问题

c - 删除c中链表中最后一项的问题

c - 追加数组

python - 从 C 到 Python 的回溯排列

c - 有符号/无符号整数

c - 如何在C中生成12位随机数?

c - APUE : Createing a file with a hole in it: Figure 3. 2 第 65 页

c - 如何编写从文本文件返回特定行的 ANSI C 用户定义函数?

c++ - OpenCV 与 Qt 集成

c - 打印结构