c - 我的小程序的终端崩溃了

标签 c codeblocks

当我尝试执行这个小程序时,我的终端崩溃了,我不知道为什么!有人可以帮助我吗? =) 问题出在这段时间。我的 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/

相关文章:

C列表排序程序调试后才有效

c - 在 C 中实现哈希表(使用链表避免冲突)的必要结构?

c - 写入ini文件

c++ - 如何查看到控制台的长 C++ 输出(仅显示结束部分)

c++ - 输出不是预期的

c - 我找不到编译器中指出的函数

c - 如何从 Eclipse 中运行脚本

c - 用C搭建一个框架,让它像erlang一样有 future

c - 单击代码块中的“构建并运行”后,错误 : CentralTendencies. exe 已停止工作

c++ - 代码在 Switch 内部的函数之后不执行