同一程序的不同输出

Different Outputs From Same Program

使用 GCC 编译以下代码时,仅从用户获取三个输入,而使用在线 C 编译器编译需要 5 个输入。为什么会这样??

#include <stdio.h>
struct student {
    char firstName[50];
    int roll;
    float marks;
}; 

int main() {
    struct student s[3];
    int i,n;
    //printf("Enter n students:\n");
    //scanf("%d",&n);

    // storing information
    for (i = 1; i <=5; ++i) {
        
        printf("Enter first name: ");
        scanf("%s", s[i].firstName);
        printf("Enter marks: ");
        scanf("%f", &s[i].marks);
    }
    printf("Displaying Information:\n\n");

    // displaying information
    for (i = 1; i <=5; ++i) {
        
        printf("First name: %s\n",s[i].firstName);
        
        printf("Marks: %.f", s[i].marks);
        
    }
    return 0;
}

您正在写越过数组的边界 s。它只有 3 个元素,但您正试图写入 5 个。写入数组末尾触发 undefined behavior,在您的情况下,这在两个不同的系统上表现为不同的行为。

s 更改为有 5 个元素。

struct student s[5];

您还在读取和写入循环中从 1 循环到 5。数组的第一个元素的索引为 0,因此您想从 0 循环到 4。

for (i = 0; i <5; ++i) {