所以我试图在我的C程序中打开.txt(或.bin)文件。 当我运行代码时它给我0错误,但控制台显示为空。 我相当确定我的代码是正确的。 有没有什么我需要设置,以便能够在Linux上打开文件(我相当新)?喜欢许可,但是再次它会给我错误没有许可,对吗?
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct znakovi{
int tocka;
int upitnik;
int usklicnik;
};
struct znakovi interpukcijski(FILE *f){
int brojac_tocki=0,brojac_upitnika=0,brojac_usklicnika=0;
char c;
while((c==fgetc(f))!=EOF){
if(c=='.')
brojac_tocki++;
if(c=='?')
brojac_upitnika++;
if(c=='!')
brojac_usklicnika++;
}
struct znakovi z;
z.tocka=brojac_tocki;
z.upitnik=brojac_upitnika;
z.usklicnik=brojac_usklicnika;
return z;
}
int main(){
struct znakovi d;
FILE *f;
f=fopen("/home/matej/pmalabos/vjezba1/zd.txt","r");
if(f==NULL)
return -1;
d=interpukcijski(f);
printf("%d %d %d",d.tocka,d.upitnik,d.usklicnik);
fclose(f);
return 0;
}
答案 0 :(得分:1)
你有一个表达式,你想要一个作业:
while((c==fgetc(f))!=EOF)
- &GT;
while((c=fgetc(f))!=EOF)
由于c
未初始化,因此很可能导致&#34;垃圾&#34;与输入相比,可能&#34;假&#34;。
那么&#34;假&#34;与'EOF&#34;。进行比较
这更多地转化为&#34; 0!= - 1&#34;,这是真的
这将循环变成无限循环
这可以防止任何输出发生。
您还应该采用Anttii Haapalas的提示,为c
使用正确的类型。
结束输出程序的另一种方法似乎是失败的文件打开。 要诊断对此的更改:
if(f==NULL)
{
printf("File open error, leaving!\n");
return -1;
}