2014-09-20 43 views
-4

在這個程序:在C中無限運行的代碼是什麼?

#include<stdio.h> 

int a[5],c=0; 

int main() 
{ 
    printf("Enter no\n"); 
    scanf("%d",&a); 
    for(int i=0;a[i];i=+2) { 
     printf("%d ",a[i]); 
    } 
    return 0; 
} 

我想輸入12345和獲取輸出1 3 5,但該計劃永遠不會終止。我怎樣才能做到這一點?

+1

因爲'a [i]'從來不是0. – Maroun 2014-09-20 18:35:29

+1

首先在數組'a'中使用5個輸入uinsg for循環,然後把'i + = 2'而不是'i + 2' – Rustam 2014-09-20 18:36:19

+1

'i'的值永遠不會改變。 – Havenard 2014-09-20 18:39:23

回答

0

代碼無限運行,因爲循環內部沒有任何更改會導致循環終止。沒有變量的值在循環內部的任何地方改變。如果a[i]在第一次迭代中爲真,它將永遠保持爲真,因爲i的值永遠不會改變。

2

for循環這樣

for(initialization ; condition check ; variable update) 

定義在你的代碼

for(int i=0;a[i];i+2) 
{ 
    printf("%d ",a[i]); 
} 

for循環設置爲[I],這可能是從來沒有假的條件的一部分。所以循環無限運行。變量更新也不正確。我的價值應該更新。

嘗試

for(int i=0; i<5; i+=2) 
{ 
    printf("%d ",a[i]); 
} 
3

說實話,你的代碼只是所有的地方,它看起來好像你只是瘋狂猜測:

  1. 你不可錯過的int數組scanf(),請求它讀取一個int,並期望它將所有數字的多位數字全部自己放入各個元素中。您可能需要讀取字符串,或者只讀一個int並自己提取數字。

  2. 變量c未使用。

  3. 您的for循環根本沒有意義。即使你填充了數組a的所有元素,它仍然沒有意義,而你沒有。

這是你的代碼的一個明智的版本,讀入一個字符串:

#include<stdio.h> 

int main(void) { 
    char a[6]; 

    printf("Enter no\n"); 
    fgets(a, 6, stdin); 

    for (int i = 0; i < 5; i += 2) { 
     printf("%c ", a[i]); 
    } 

    putchar('\n'); 

    return 0; 
} 

與輸出:

[email protected]:~/Documents/src/sandbox$ ./num 
Enter no 
12345 
1 3 5 
[email protected]:~/Documents/src/sandbox$ 

注意這並沒有檢查用戶是否真的沒有進入五個字符,其中您的程序應該做的。