2016-06-10 71 views
0

我不知道我在做什麼錯,但for循環沒有初始化
代碼只是立即顯示printfs。這其中沒有任何值,因爲for循環沒有激活爲什麼這個循環會被忽略?

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h> 
#include <stdlib.h> 
#define PAUSE system("Pause") 

main() { 
    // INITALIZE VARIABLES 
    int number = 0; 
    int i = 0; 
    int odd = 0; 
    int even = 0; 
    int totalNum = 0; 
    int tempNum = 0; 
    int count; 

    printf("Enter a number between 2 and 25\n"); 
    scanf("%i", &number); 

    do{ 
     if (number < 2 || number > 25) 
      printf("That was an invalid number please try again\n"); 
      scanf("%i", &number); 
    } while (number < 2 || number > 25); 

    printf("Enter how many numbers you want to input\n"); 
    scanf("%i", &count); 

    for (i = 1; i == count; ++i){ 
     printf("input numbers\n"); 
     scanf("%i", &tempNum); 
     if (tempNum % 2 == 0) 
      even++; 
     else 
      odd++; 
     totalNum = totalNum + tempNum; 
    } // END FOR LOOP 

    // DISPLAY OUTPUT 
    printf("You entered %i numbers\n", count); 
    printf("The sum of the %i numbers is %i\n", count, totalNum); 
    printf("The average of the %i numbers is %i\n", count, totalNum/count); 
    printf("You entered %i odd numbers and %i even numbers\n", odd, even); 

    PAUSE; 
} // END MAIN 
+0

這些問題的答案不給修復,'我== count' - >'我<=計數「投票結束,因爲一個簡單的錯字。 –

+0

對於(i = 0; i Barmar

回答

0

i = 1,所以i == count;false因此循環被忽略。

+1

哦謝謝我改變了比較運營商,它的工作原理 –

+0

@PastelitosSlim不客氣。不要忘記選擇你的最佳答案;) – ktalik

1

當您初始化i1時,您的循環最多隻能執行一次,當時爲count == 1

如果你輸入計數1

printf("Enter how many numbers you want to input\n"); 
    scanf("%i", &count); 

循環將剛好運行一次,直到i遞增到2

你可能想:

for (i = 1; i <= count; ++i){ 
+0

請看我的評論。 –

+0

@WeatherVane我在投票前加了修正 – Ray

+0

沒有你的修復'我

0

for循環中C的作品如下:

for (variable initialization; condition; variable update) { 
    /* Do something... */ 
} 

該循環將執行長達條件爲真。所以,當你這樣做:

for (i = 1; i == count; ++i) 

的循環將執行,只要我==算是真實的。所以,除非count保持當這條線被執行時,循環將永遠不會運行。

正如其他人指出的那樣,你可能希望這樣的:

for (i = 1; i <= count; ++i) 

所以,你的循環將用於所有值運行,直到它達到計數

作爲一個方面說明我應該指出的是,通常的方式在C循環寫的是這樣的:

for (i = 0; i < count; i++) 

我們先從I = 0因爲C數組從零開始,所以數組中的第N個元素有索引n-1

0

你太親近了。除了修復您的循環測試條款for (i = 1; i <= count; i++)之外,我還建議您使用" %d"代替格式說明符。您的do循環只需要一個while循環以避免每次打印您的invalid number消息。

此外,儘管沒有錯誤,但C的標準編碼風格避免了caMelCase變量,而傾向於所有的小寫字母。見例如NASA - C Style Guide, 1994

通過這些更改(並將您的奇數/偶數檢查更改爲簡單的&),您可以按如下方式編寫代碼。

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h> 
#include <stdlib.h> 
// #define PAUSE system("Pause") 

int main (void) 
{ 
    int number, i, odd, even, totalnum, tempnum, count; 
    number = i = odd = even = totalnum = tempnum = count = 0; 

    printf ("enter a number between 2 and 25: "); 
    scanf (" %d", &number); 

    while (number < 2 || number > 25) { 
     printf ("invalid number, again (between 2 and 25): "); 
     scanf (" %d", &number); 
    } 

    printf ("numbers to input: "); 
    scanf (" %d", &count); 

    for (i = 1; i <= count; i++) { 
     printf ("input number %2d: ", i); 
     scanf (" %d", &tempnum); 
     if ((tempnum & 1) == 0) 
      even++; 
     else 
      odd++; 
     totalnum = totalnum + tempnum; 
    } 

    printf ("You entered %d numbers\n", count); 
    printf ("The sum of the %d numbers is %d\n", 
      count, totalnum); 
    printf ("The average of the %d numbers is %d\n", 
      count, totalnum/count); 
    printf ("You entered %d odd numbers and %d even numbers\n", 
      odd, even); 

//  PAUSE; 
    return 0; 
} 

注:main是類型int(例如int main (int argc, char **argv)或簡單地int main (void),以指示沒有采取參數)。由於它是int類型,因此它會爲return一個值。儘管歷史實現可能允許void main,而便攜式代碼已不再適用。

示例使用/輸出

$ /bin/forskipped 
enter a number between 2 and 25: 4 
numbers to input: 4 
input number 1: 1 
input number 2: 2 
input number 3: 3 
input number 4: 4 
You entered 4 numbers 
The sum of the 4 numbers is 10 
The average of the 4 numbers is 2 
You entered 2 odd numbers and 2 even numbers 

看一下它,並讓我知道如果您有任何問題。

1
do{ 
    if (number < 2 || number > 25) 
     printf("That was an invalid number please try again\n"); 
     scanf("%i", &number); 
} while (number < 2 || number > 25); 

應該...

do{ 
    if (number < 2 || number > 25){ 
     printf("That was an invalid number please try again\n"); 
     scanf("%i", &number); 
    } 
} while (number < 2 || number > 25); 

否則它會詢問總是另一個號碼

+0

好的接受,最好有一個'while(number <2 || number> 25){'loop。 –