我的代码有什么问题?在score[i]的倒数第三行,程序说i是未声明的

yv5phkfx  于 2022-12-03  发布在  其他
关注(0)|答案(3)|浏览(146)

我刚开始学习C语言。所以,我遇到了很多问题。我以为在for循环下声明i就足够了,我也可以在外部使用i for的值。但我认为,事实并非如此。请有人解释一下情况。

# include <stdio.h>

int main(void)
{
    int x;
    printf("Enter how many numbers in arrays you want to input  :   ");
    scanf("%i", &x);

    int score[x];

    for(int i= 0; i <= x; i++)
    {
        printf("Enter the score :   ");
        scanf("%i", &score[i]);
    }
    // in the below line the output said "i" is undeclared.
    float average = score[i] / x;
    printf("The average score is    :   %f", average);
}
k75qkfdt

k75qkfdt1#

答案相当简单
因为你decaled i的位置,它只对for循环可见。要使i对整个函数可见,你需要做的就是:

int i = 0;
for (; i <=x; i++){
    printf("Enter the score :   ");
    scanf("%i", &score[i]);
}

这使得i在整个函数中都可用

58wvjzkj

58wvjzkj2#

ifor语句的初始化部分声明。这意味着该变量的作用域和生存期是for语句本身及其包含的块语句中的表达式。一旦循环完成,该变量就不再存在。
如果要在循环外部使用i,则需要在循环外部声明它。

int i;
for(i= 0; i <= x; i++)

也就是说,您实际上不需要在循环之外使用i

cnjp1d6j

cnjp1d6j3#

使用scanf会有一些安全问题,所以不要把它用在任何严肃的事情上。也就是说,我试着重新编写你的程序,但它仍然有相当垃圾的输入验证。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define INPUTTEXTLEN 20
#define MAXINPUTINT 1000

int inputint() {  
    char inputtext[INPUTTEXTLEN + 1] = {0};
    long inputval;
    while (1) {
        fgets(inputtext, INPUTTEXTLEN, stdin);
        if (strlen(inputtext) > 0) {
            inputval = atoi(inputtext);
            if ((inputval < MAXINPUTINT) && (inputval >= 0)) break;
        }
    }
    return (int)inputval;
}

int main(void)
{
    int x = 0;
    printf("Enter how many numbers in arrays you want to input  :   ");
    //scanf("%i", &x);
    while (x <= 0) {
        x = inputint();
    }

    int score[x];
    float average = 0;

    for(int i= 0; i < x; i++)
    {
        printf("Enter the score :   ");
        //scanf("%i", &score[i]);   
        score[i] = inputint();
        average += score[i];
    }
    average /= x;
    printf("The average score is    :   %f\n", average);
}

相关问题