同一程序的不同输出
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) {
使用 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) {