2016-06-10 36 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。 –