当我尝试执行这个小程序时,我的终端崩溃,我不知道为什么!有人可以帮帮我吗? =)问题在于。我的colpiler(代码:块)没有说任何O_o只是一个警告,但没有错误。
#include<stdio.h>
#include<stdlib.h>
#define mxl 30
typedef struct inc{
int ora;
char desc[mxl];
} incluso;
typedef struct dati {
char data[mxl];
int n_a;
incluso *a;
} agenda;
int main(){
FILE *f;
agenda *p;
int i,orai,oraf;
char c, datar[mxl],nomefile[mxl],datapp[mxl];
printf("Inserisci il nome del file: ");
scanf("%s",&nomefile);
f=fopen(nomefile,"r");
if(f==NULL){
printf("Impossibile aprire il file!");
exit(1);
}
else{
printf("Inserisci data, ora inizio ed ora fine nel formato gg/mm hh hh: ");
scanf("%s %d %d",datar, orai,oraf);
while((c=getc(f))!=EOF){
if(fscanf(f,"%s",&datapp)==datar){
fscanf(f,"%s",&p->data);
fscanf(f,"%d",&p->n_a);
p->a=(incluso*)malloc(p->n_a*sizeof(incluso));
for(i=0;i<p->n_a;i++){
fscanf(f,"%d",&p->a[i].ora);
fscanf(f,"%s",&p->a[i].desc);
}
}
}
for(i<0;i<p->n_a;i++){
if(p->a[i].ora>orai && p->a[i].ora<oraf )
printf("%s %d %s", p->data, p->a[i].ora, p->a[i].desc);
}
free(p->a);
fclose(f);
}
}
答案 0 :(得分:1)
除了BLUEPIXY已经提到过的内容:
scanf("%s",&nomefile);
应该是
scanf("%s",nomefile);
因为nomefile
是一个数组并且已经缩减为指针。
if(fscanf(f,"%s",&datapp)==datar){
同样在这里。它应该是:
if(fscanf(f,"%s",datapp)==datar){
另外你想在这里比较一下?左侧是int
,右侧是char*
。如果你想比较你必须在额外的行和strcmp
中进行的字符串:(你还需要#include <string.h>
)
fscanf(f,"%s",datapp);
if(strcmp(datapp, datar) == 0){
再次出现同样的问题:
fscanf(f,"%s",&p->a[i].desc);
应该是
fscanf(f,"%s",p->a[i].desc);
在这里你可能有一个错字:
for(i<0;i<p->n_a;i++){
应该是
for(i=0;i<p->n_a;i++){
激活所有警告(-Wall -Wextra
)gcc警告我这些警告。
另外(但没有警告)您反复分配p->a
。这应该只在循环之前完成一次。不要忘记释放p
。
答案 1 :(得分:0)
我注意到的问题如下......
变化
scanf("%s %d %d",datar, orai,oraf);
到
scanf("%s %d %d",datar, &orai, &oraf);
和
fscanf(f,"%s",&p->data);
到
p = malloc(sizeof(*p));
...
fscanf(f,"%s", p->data);
ADD
if(fscanf(f,"%s",&datapp)==datar){
可能
if(fscanf(f, "%s", datapp)==1){