为什么scanf()函数中为-35?

问题描述 投票:0回答:1

我有一个data.txt文件,需要在每一行中读取不同数量的整数以进行进一步处理,有些可能为空行。

//data.txt
3 7 2 1 9
8

234 0 2 -1

而且我使用程序来读取它。

int main() {
    FILE *fp=fopen("data.txt","r");
    char input;
    int temp;
    if(fp==NULL){
        perror("Cannot open file!\n");
        exit(1);
    }

    while(!feof(fp)){
        while(fscanf(fp,"%c",&input)==1){
            if(input==' '){
                printf(" ");
                continue;
            }
            else if(input=='\n') {
                printf("This line finished.\n");
                continue;
            }
            else if(input=='-'){
                fscanf(fp,"%c",&input);
                temp=-(int)(input-'0');
                printf("%d",temp);
                continue;
            }
            temp=(int)(input-'0');
            printf("|%d|",temp);
        }

    }
    fclose(fp);
    return 0;
}

而且我在每行上得到一些奇怪的结果,-35。

|3| |7| |2| |1| |9||-35|This line finished.
|8||-35|This line finished.
|-35|This line finished.
|2||3||4| |0| |2| -1
Process finished with exit code 0

有人知道我的程序有什么问题吗?

c scanf
1个回答
0
投票

temp=(int)(input-'0');

您将从任何输入中减去48(ASCII 0)并得到-35。这意味着您输入的是13。快速检查ASCII表显示13是\ r,即回车。

我猜您在Windows平台上。 Windows将\ r \ n用作新行,您将\ r打印为-35,并转到\ n时,打印“此行已完成”。

© www.soinside.com 2019 - 2024. All rights reserved.