我认为我的问题源于printf
打印缓冲区,但我对C或缓冲区知之甚少知道如何处理它。我编写了一个简单的程序,它根据输入的文件,根据一些if
/ else
语句打印一堆文本(字符/字符串)。如果我从这样的Unix shell中调用它:
gcc -o myProgram myProgram.c
./myProgram fileName
只有第一次运行才能正确打印出来。如果我重申这些步骤并再次运行程序,它会在输出printf
之间打印出一堆“bash”命令。有没有简单的方法来调试或修复此问题?我对C很新,如果你不能说,我正在将它作为学校作业的一部分,所以我试图弄清楚这一点并理解这个概念,这样我就可以将它应用到我的实际课程作业。
编辑:这是一个尝试演示我的问题的转换示例 注意:输入的文件只包含文本。
#include <stdio.h>
#include <stdlib.h>
struct S{
char word[30];
}s;
int main(int argc, char ** argv)
{
void print(struct S *s);
int i;
FILE *f = fopen(argv[1], "rb");
fseek(f, 0, SEEK_SET);
fread(&s, sizeof(s), 1, f);
print(&s);
fclose(f);
}
void print(struct S *s)
{
int i = 0;
printf("Word: ");
for(i = 0; i < 30; i++)
{
if(s->word[i] != '\0')
{
printf("%c", s->word[i]);
}
else
{
break;
}
}
printf("\n");
}
答案 0 :(得分:3)
您可以测试一下:
在main()的第一行添加以下行:
setbuf( stdout , NULL );
程序的输出存储在缓冲区中,当您调用printf时,它们被提取出来。 setbuf()方法用于处理该缓冲区。当你添加setbuf(stdout,NULL)时,这告诉缓冲区不存储输出并直接将程序的输出发送到stdout。