fflush(stdout) 不工作,但 \n'用C语言工作
当我遇到这个错误时,我正在做作业问题,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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论