2016-11-06 108 views
-1

我想知道是否有一種方法來獲得一個整型變量的值之前,它進入循環,執行循環後。如何在執行循環之後的循環之前獲取變量的值?

例如:

#include <stdio.h> 
int main(){ 
    int x; 

    x = 1; 
    printf("%d\n", x); 

    while(x < 2000){ 
    x++; 
    printf("%d\n", x); 
    } 
    printf("before the loop, X had a value of %d", x); 
} 

有沒有辦法有最終printf()打印的x其中x在進入while()循環之前持有的價值?或者是在循環之前使用另一個變量創建x副本的唯一方法?

+6

創建副本。你畢竟修改循環內'x'的值 – UnholySheep

+2

沒有。計算機存儲變量在程序中保存的每個值將是非常昂貴的。只是製作一個'x'的副本要便宜得多。 –

回答

2

在抽象的背景下,你通常有兩種選擇:

  1. 「超前思考」的方法:存儲原始值事前,即施加任何修改原始值之前創建一個副本。
  2. 「轉回時間」方法:使用新值作爲起點以「恢復」所有修改,從而達到原始值。

在一般情況下,每種方法都存在權衡。

適用於您特定的簡單示例,這兩種方法涉及在循環前存儲變量的副本,或「撤消」循環所做的更改(通過使用您對此循環的語義的深入瞭解)。在這種情況下,後者可以歸結爲

printf("before the loop, X had a value of %d", x - 1999); 
1

沒有,有獲得初始沒有神奇方式(任何先前的狀態,對於這個問題)一個變量的值,一旦被修改。您必須自己創建(維護)副本。

0

循環到另一個變量之前指定的舊值:

int x; 
int old_x; 

x = 1; 
printf("%d\n", x); 

old_x = x; 
while(x < 2000){ 
    x++; 
    printf("%d\n", x); 
} 
printf("before the loop, X had a value of %d", old_x); 

,反之亦然,使用不同的變量:l,循環,並保持原來不變。

編譯器無法爲您做到這一點。