【发布时间】: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-1是i - 1th 元素的指针。在while条件中,您要检查它指向的内容是否为正,而不是指针本身。 (顺便说一句,如果您只是打印每个读取整数的信息,则不需要分配内存。只需在读取整数时处理整数。) -
请注意,如果您使用
-Wall[clang] 或-Wall和-Wempty-statement[gcc] 进行编译,那么if(amount!= -1);将被标记 i> 带有警告