当我编译这段代码时:
#include <stdio.h>
void main() {
int n, i, total=0;
printf("Enter the number of employees");
scanf("%d", &n);
struct emprecord
{
    int salary, total;
    char name[50];
};
struct emprecord emp[50];
for (i=0; i<n; i++) {
    printf("Enter the name of employee %d", i+1);
    scanf("%s", &emp[i].name);
    printf("Enter the salary of employee %d", i+1);
    scanf("%d", &emp[i].salary);
    total=total+emp[i].salary;
}
printf("Total salary is: %d", total);
}我得到以下错误,并且假设一旦第一个错误得到解决,所有错误都将被修复:
C:\Users\shihab130489\Documents\Cpp18888r6u54ru.c(8):错误C2143: 语法错误:缺少';‘前面'’ C:\Users\shihab130489\Documents\Cpp18888r6u54ru.c(10):错误C2143: 语法错误:缺少“;”在“类型”之前 C:\Users\shihab130489\Documents\Cpp18888r6u54ru.c(12):C2133:'emp‘:未知大小 C:\Users\shihab130489\Documents\Cpp18888r6u54ru.c(13):C2059:语法错误:“for” C:\Users\shihab130489\Documents\Cpp18888r6u54ru.c(13):错误C2143: 语法错误:在“<”之前缺少“{” C:\Users\shihab130489\Documents\Cpp18888r6u54ru.c(13):C2059:语法错误:'<‘ C:\Users\shihab130489\Documents\Cpp18888r6u54ru.c(13):错误C2143: 语法错误:在“++”之前缺少“{” C:\Users\shihab130489\Documents\Cpp18888r6u54ru.c(13):C2059:语法错误:“++” C:\Users\shihab130489\Documents\Cpp18888r6u54ru.c(13):C2059:语法错误:')‘ C:\Users\shihab130489\Documents\Cpp18888r6u54ru.c(20):错误C2143: 语法错误:缺少')‘之前的’字符串‘ C:\Users\shihab130489\Documents\Cpp18888r6u54ru.c(20):错误C2143: 语法错误:在“字符串”之前缺少“{” C:\Users\shihab130489\Documents\Cpp18888r6u54ru.c(20):C2059:语法错误:'‘ C:\Users\shihab130489\Documents\Cpp18888r6u54ru.c(20):C2059:语法错误:')‘ C:\Users\shihab130489\Documents\Cpp18888r6u54ru.c(21):C2059:语法错误:'}‘
有人能帮我解决第一个错误吗?我不明白这是甚麽问题。
发布于 2015-12-15 06:09:30
Microsoft编译器(似乎在VS2013之前)只接受C89/C90,并且只允许在函数中的任何可执行语句之前定义类型和变量。您正在尝试在一些可执行语句之后声明结构。这在C++、C99和C11中是有效的,但在C90中则无效。
因此:
#include <stdio.h>
int main(void)
{
    int n, i, total = 0;
    struct emprecord
    {
        int salary, total;
        char name[50];
    };
    struct emprecord emp[50];
    printf("Enter the number of employees");
    if (scanf("%d", &n) != 1)
    {
        fprintf(stderr, "Did not read a number successfully\n");
        return 1;
    }
    if (n <= 0 || n > 50)
    {
        fprintf(stderr, "Error: you entered %d but it should be in the range 1..50\n", n);
        return 1;
    }
    for (i = 0; i < n; i++)
    {
        printf("Enter the name of employee %d", i+1);
        if (scanf("%s", &emp[i].name) != 1)
            break;  // Sloppy but effective
        printf("Enter the salary of employee %d", i+1);
        if (scanf("%d", &emp[i].salary) != 1)
            break;  // Sloppy but effective
        total += emp[i].salary;
    }
    printf("Total salary is: %d\n", total);
    return 0;
}当你只对薪水感兴趣时,让人们输入名字是很残忍的。
发布于 2015-12-15 05:35:39
最好将结构定义放在main之前。
但是,当我使用gcc 4.5.1时没有错误。
https://stackoverflow.com/questions/34281705
复制相似问题