与'while'语句相关的GCC编译错误[重复]

n3ipq98p  于 2023-04-29  发布在  其他
关注(0)|答案(3)|浏览(196)

此问题已在此处有答案

Lots of stray errors - "error: stray ‘\210’ in program in C++" [duplicate](1个答案)
9年前关闭。
当尝试使用GCC编译这个简短的C程序时,我得到了以下错误:

expected ‘)’ before numeric constant
make: *** [file3_5.o] Error 1
stray ‘\210’ in program
stray ‘\227’ in program
stray ‘\342’ in program

Eclipse 4.2(Juno)将所有这些错误都指向一行代码:

while(fgets(line ,STRSIZE∗NFIELDS, fp))

使用以下语句进行编译:

gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"file3_5.d" -MT"file3_5.d" -o "file3_5.o" "../file3_5.c"

下面是我正在尝试编译的程序:

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

#define STRSIZE 100
#define NFIELDS 9

int main()
{
    char inputfile[] = "/home/ty/workspace/OpenCoursware_Exercises/Assign_   /stateoutflow0708.txt";

    /* Define all of the fields */
    char state_code_org[STRSIZE];
    char country_code_org[STRSIZE];
    char state_code_dest[STRSIZE];
    char country_code_dest[STRSIZE];
    char state_abbrv[STRSIZE];
    char state_name[STRSIZE];
    char line[STRSIZE*NFIELDS];
    int return_num = 0;
    int exmpt_num = 0;
    int aggr_agi = 0;
    long total = 0;

    /* File related */
    int fields_read = 0;
    FILE* fp = fopen(inputfile, "r");
    if(fp == NULL)
    {
        fprintf(stderr, "Cannot open file\n");
        exit(-1);
    }

    /* Skip the first line */
    fgets(line, STRSIZE*NFIELDS, fp);
    /* Print the header */
    printf ("%-30s,%6s\n", "STATE", "TOTAL");
    printf("---------------------------------------\n");
    while(fgets(line, STRSIZE∗NFIELDS, fp))
    {
        /* Parse the fields */
        fields_read = sscanf(line,
                             "%s %s %s %s %s %s %d %d %d",
                             state_code_org,
                             country_code_org,
                             state_code_dest,
                             country_code_dest,
                             state_abbrv,
                             state_name,
                             &return_num,
                             &exmpt_num,
                             &aggr_agi);
        if(strcmp(state_code_org, "\"25\"") == 0)
        {
            printf("%-30s, %6d\n", state_name, aggr_agi);
            total += aggr_agi;
        }
    }

    /* Print the header */
    printf(" ----------------------------------------\n");
    printf("%-30s,%6lu\n", "TOTAL", total);
    fclose(fp);
    return 0;
}
rbl8hiat

rbl8hiat1#

你的不是乘法运算符*,它们可能看起来很相似,但是是不同的字符,并且gcc不识别 *

twh00eeo

twh00eeo2#

while(fgets(line ,STRSIZE∗NFIELDS, fp))
                         ^
                         ^

应该是

while(fgets(line ,STRSIZE*NFIELDS, fp))
                         ^
                         ^

(是否看到两者之间的差异取决于用于显示字符的字体)。
第一个中的 * 不是用于乘法运算符的字符,它是this character here

2ledvvac

2ledvvac3#

STRSIZENFIELDS中的“”字符不是常规的 *(ASCII值42),而是Unicode字符“ASTERISK OPERATOR”。
这就是编译器试图通过抱怨源代码中的杂散字符来告诉您的。

相关问题