【问题标题】:read indefinite amount of integers and print on file读取不定数量的整数并在文件上打印
【发布时间】:2020-05-31 17:27:18
【问题描述】:

*这个程序读取整数,直到一个为负数,然后在文件上打印每个整数的特征:它可以被多少整数除。问题是即使我插入负数,它也会一直要求整数。请让我知道您是否可以在不更改太多代码的情况下解决此问题

#include <stdio.h>
#include <stdlib.h>
int checkdiv(int *n);
int main(int argc, char * argv[]){
    int *p;
    int i, j;
    FILE *fp;
    int amount;
    i=0;
    p=NULL;

    if(fp = fopen("ris.txt", "w")){
        do{i++;
        p=realloc(p,sizeof(int)*i);
        scanf("%d", (p+i-1));
        amount=checkdiv(p+i-1);
        if(amount!= -1);
        fprintf(fp,"%d  %d\n", *(p+i-1),amount);
        }while(p+i-1>0);

    }else{
        printf("errore");
    }
    fclose(fp);
    free(p);
    return 0;
}
int checkdiv(int *n){
int i;
int amount=0;
for(i = 2;i < *n; i++){
    if(*n % i == 0){
        amount++;
    }
}
if(*n <= 0){
    amount= -1;
}
return amount;
}

【问题讨论】:

  • 你不想要if(amount!= -1);中的分号
  • "问题可能出在 do while 循环中。" - 哪个问题?你的输入是什么?你期望的输出是什么,你实际得到的输出是什么?
  • 感谢您的澄清。 p+i-1i - 1th 元素的指针。在while 条件中,您要检查它指向的内容是否为正,而不是指针本身。 (顺便说一句,如果您只是打印每个读取整数的信息,则不需要分配内存。只需在读取整数时处理整数。)
  • 请注意,如果您使用-Wall [clang] 或-Wall-Wempty-statement [gcc] 进行编译,那么if(amount!= -1); 将被标记 i> 带有警告

标签: c file realloc


【解决方案1】:

你的问题出在:

}while(p+i-1>0);

必须;

}while(*(p+i-1)>0);

HTH

【讨论】:

    【解决方案2】:

    你应该删除行中的分号

    if(amount!=-1);
    

    这样它下面的语句就可以包含在 if 块中。

    【讨论】:

      猜你喜欢
      • 2021-04-02
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      • 2020-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      相关资源
      最近更新 更多