当我尝试执行这个小程序时,我的终端崩溃了,我不知道为什么!有人可以帮助我吗? =) 问题出在这段时间。我的 colpiler (代码:blocks)没有说什么 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);
}
}
最佳答案
除了 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
要么。
关于c - 我的小程序的终端崩溃了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21050391/