fflush(stdout) 不工作,但 \n'用C语言工作

发布于 2025-01-14 09:48:03 字数 1783 浏览 0 评论 0原文

当我遇到这个错误时,我正在做作业问题,main.c 中的 main 函数内部的 fflush 不起作用 我在 ubuntu 本地系统和 repl.it 中尝试了代码,输出不包含来自sample.c的“#include”行,唯一的“预处理器”行打印在终端中。 使用的文件: main.c

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

char token[1024];

int toksize = 0;
int breaker = 0;

int is_normal(char ch) {
    if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')
            || ch == '_' || (ch >= '0' && ch <= '9'))
        return 1;
    return 0;
}

int Tokenizer(FILE * file_ptr) {
    char ch;
    toksize = 0;

    ch = 'a';
    while (is_normal(ch) == 1 && ch != EOF) {
        ch = fgetc(file_ptr);
        if (ch == EOF) break;
        if (toksize > 0 && !is_normal(ch)) break;
        token[toksize] = ch;
        toksize++;
        token[toksize] = '\0';
    }
    if (ch == EOF)
        breaker = 1;
    if (toksize > 1 || is_normal(token[0]))
        fseek(file_ptr, -1L, SEEK_CUR);
    // fflush(stdin);
    // fflush(stdout);
    return 1;
}

int main() {
    fprintf(stderr, "ji");
    int flag = 0;
    FILE * fd = fopen("sample.c", "r");
    breaker = 0;
    if (fd == NULL) {
        printf("file not found!!");
        return 0;
    }

    while (breaker == 0 && Tokenizer(fd) > 0) {
        int stage = 0;

        if (token[0] == '#') { // handling preprocessor
            while (token[0] != '\n') {
                printf("%s", token);
                if (Tokenizer(fd) == 0) {
                    breaker = 1;
                    break;
                }
            }
            fflush(stdout);
            printf(" -- preprocessor directive\n");
        }
    }
}

样本.c

#include<stdio.h>


I was working on a homework problem when I encounter this error, fflush inside main function in main.c is not working
I tried the code in ubuntu local system and in repl.it and the output does not contain "#include" line from sample.c , The only line "preprocessor " is printed in terminal..
Files used:
main.c

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

char token[1024];

int toksize = 0;
int breaker = 0;

int is_normal(char ch) {
    if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')
            || ch == '_' || (ch >= '0' && ch <= '9'))
        return 1;
    return 0;
}

int Tokenizer(FILE * file_ptr) {
    char ch;
    toksize = 0;

    ch = 'a';
    while (is_normal(ch) == 1 && ch != EOF) {
        ch = fgetc(file_ptr);
        if (ch == EOF) break;
        if (toksize > 0 && !is_normal(ch)) break;
        token[toksize] = ch;
        toksize++;
        token[toksize] = '\0';
    }
    if (ch == EOF)
        breaker = 1;
    if (toksize > 1 || is_normal(token[0]))
        fseek(file_ptr, -1L, SEEK_CUR);
    // fflush(stdin);
    // fflush(stdout);
    return 1;
}

int main() {
    fprintf(stderr, "ji");
    int flag = 0;
    FILE * fd = fopen("sample.c", "r");
    breaker = 0;
    if (fd == NULL) {
        printf("file not found!!");
        return 0;
    }

    while (breaker == 0 && Tokenizer(fd) > 0) {
        int stage = 0;

        if (token[0] == '#') { // handling preprocessor
            while (token[0] != '\n') {
                printf("%s", token);
                if (Tokenizer(fd) == 0) {
                    breaker = 1;
                    break;
                }
            }
            fflush(stdout);
            printf(" -- preprocessor directive\n");
        }
    }
}

sample.c

#include<stdio.h>


如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文