在计算完成之前打印更改的变量

时间:2014-06-17 03:37:57

标签: c variables

在c程序中,我希望在程序开头打印变量'count'。但是'count'值的计算是在稍后完成的。你是如何做到这一点的?

    count = 0;
    printf("the value of count is : %d", count);
    count = 20;

我知道在这种情况下,输出为0.但是我需要打印20个。

2 个答案:

答案 0 :(得分:4)

程序流的想法是命令以特定顺序执行。在你告诉他你想吃什么之前,你不要指望服务员给你带来你的饭 - 但这似乎就是你所要求的。

当然,文件中行的顺序不一定是执行顺序:您在“文件的开头”有一行,稍后执行:例如

#include <stdio.h>

// we define the print statement here:
void printCount(count) {
  printf("the count is now %d\n", count);
}

int main(void) {
  int count = 20;
  printCount(count); // but we don't execute it until we get here...
  return 0;
}

现在,在分配(计算)count之前,您的“打印”语句会出现(在文件中) - 但当然它们的执行顺序正确。

<强>事后

如果是打印“案件数量为n”的情况,您当然可以

printf("the number of cases is ");
cases = 5; // whatever math is needed happens here...
printf("%d\n", cases);

,结果是

the number of cases is 5

就像你想要的那样......这是有效的,因为在打印“案件数量”之后没有回车符 - 所以当你想出它时,数字就会出现。

修改

再次阅读问题和评论,我想我明白你的问题是什么。你有一个循环来计算一些输入(比如一个文件中的行数),并且想要打印两个案例的总数(在循环之前不知道)和每个案例(在循环中发现)的东西但没有必须两次遍历所有数据。使用打印缓冲区 是一种方法。如果数据访问速度非常慢并且循环两次会令人望而却步,那么这可能是一种选择。您可能希望在内存中初始化“足够大”的打印缓冲区,并使用snprintf创建所需的字符串。实际上,“循环”输出字符串中的字节两次,但性能损失最小(与其他所有内容相比)。不完整的例子:

int count=0,num, sofar=0;
char buf[2000];
// assume file is opened and handle is fp
while(true){
  if (fscanf(fp, "%d", &num) <1) break;
  sofar+=snprintf(buf+sofar, "%d\n", 2*num); // some "math" on number for each "case"...
  count++;
}
printf("There were %d lines\n", count);
printf("Here they are multiplied by two:\n");     
printf("%s\n", buf);

显然上面的内容是不完整的 - 你需要检查错误,打开/关闭文件等等 - 我只是想指出原理 - 这样你只需循环数据(文件)一次但打印计数在内容之前。

答案 1 :(得分:0)

你无法打印20.如何在变量初始化之前打印变量?