首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fgetc给我垃圾

fgetc给我垃圾
EN

Stack Overflow用户
提问于 2018-01-23 11:24:22
回答 1查看 650关注 0票数 1

我编写了一个简单的程序,将ASCII文件的文本输出到命令行,但我得到的是垃圾字符。这里是我代码的相关部分:

代码语言:javascript
复制
void main(int argc, char *argv[]) {
    char *filename;
    ... [filename is defined here as the command-line argument]
    FILE *fptr = fopen(filename, "r");
    if (fptr == NULL) {
        printf("Error: no such file %s!\n", filename);
        exit(1);
    } else {
        int c;
        while(c = fgetc(fptr) != EOF) {
            putchar(c);
        }
        fclose(fptr);
    }
}

当我使用一个包含一行文本的简单测试文件运行这段代码时,我会得到一堆垃圾符号。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-23 11:33:40

运算符!=优先于运算符=,因此您的变量c被分配给比较值(fgetc(fptr) != EOF)。要解决这个问题,您必须在任务周围加上括号:

代码语言:javascript
复制
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>

int main(int argc, char ** argv)
{
    assert(argc == 2);
    FILE * fptr = fopen(argv[1], "r");
    assert(fptr);
    int c;
    while((c = fgetc(fptr)) != EOF) putchar(c); 
    fclose(fptr);
    return 0;
}

(请注意,我断言这些值只是为了便于阅读。因为您的程序与用户交互,所以通过手动检查它们并打印特定的错误消息,您做得很好。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48400532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档