在txt文件C中搜索和写入
我需要帮助:/这个程序应该在txt文件中查找文本,如果文本在那里,然后生成另一个文本。 例如: 我随机生成 在ALUM_PROF值中插入2,4; 我在txt中查找,如果找到了这个文本,如果没有,我就把它写在txt中 然后产生 在ALUM_PROF值中插入5,7; 我在txt中查找,如果不是,我在txt中写入 然后产生 在ALUM_PROF值中插入2,4; 我在txt中查找它,就像在中一样,然后我不写它,我再次生成另一个在txt文件C中搜索和写入,c,C,我需要帮助:/这个程序应该在txt文件中查找文本,如果文本在那里,然后生成另一个文本。 例如: 我随机生成 在ALUM_PROF值中插入2,4; 我在txt中查找,如果找到了这个文本,如果没有,我就把它写在txt中 然后产生 在ALUM_PROF值中插入5,7; 我在txt中查找,如果不是,我在txt中写入 然后产生 在ALUM_PROF值中插入2,4; 我在txt中查找它,就像在中一样,然后我不写它,我再次生成另一个 int NUMEROS_AL_PROFE(); #define fila 1
int NUMEROS_AL_PROFE();
#define fila 100
int main()
{
char aux[200];
char aux2[200];
int contador=0;
FILE *f;
f = fopen("prueba.txt","a+");
if(f==NULL)
{
printf("no se ha podido abrir el archivo");
exit(1);
}
int i,num_prof,num_alum=1;
num_prof = NUMEROS_AL_PROFE();
fprintf(f,"INSERT INTO ALUM_PROF VALUES (%d,%d);\n",num_alum,num_prof); //escribo en el fichero f
num_alum++;
for(i=0;i<fila;i++)
{
num_prof = NUMEROS_AL_PROFE();
sprintf(aux,"INSERT INTO ALUM_PROF VALUES (%d,%d);\n",num_alum,num_prof); //almaceno el valor en aux
while(!feof(f))
{
fgets(aux2,200,f); //I read from the file f and I keep each line in aux2
if(strcmp(aux,aux2) == 0 ) //If a1 and a2 are equal then it is repeated.
{
contador=1;
}
memset(aux2, '\0',200); //Vacio el array aux2
}
memset(aux, '\0',200);
if(contador==0)
{
fprintf(f,"INSERT INTO ALUM_PROF VALUES (%d,%d);\n",num_alum,num_prof);
}
num_alum++;
}
fclose(f);
}
//Random Number
int NUMEROS_AL_PROFE()
{
int num;
num = rand() % 17 + 1; //Numeros aleatorios entre 1 y 17
num = num + 1;
return num;
}
程序进行编译,并且在运行时保持加载状态,它不会写入任何内容并生成大量的txt。您需要重置文件的读取位置和contador标志 修复代码示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define fila 100
int NUMEROS_AL_PROFE(void);
int main(void){
char aux[200];
char aux2[200];
int contador=0;
FILE *f = fopen("prueba.txt","a+");
if(f==NULL) {
printf("no se ha podido abrir el archivo");
exit(1);
}
int num_alum = 1;
srand(time(NULL));//Change seed of random number
for(int i = 0; i < fila; i++){
sprintf(aux,"INSERT INTO ALUM_PROF VALUES (%d,%d);\n", num_alum++, NUMEROS_AL_PROFE());
rewind(f);//The file reading position is set to the beginning.
contador = 0;//reset flag
while(fgets(aux2, sizeof aux2, f)){//while(!feof(f)) has a problem. It has already been pointed out by stackptr's comment.
if(strcmp(aux, aux2) == 0 ){
//fprintf(stderr, "DEBUG:already exist %s", aux);
contador = 1;
break;
}
}
if(contador == 0){
//fprintf(stderr, "DEBUG:write %s", aux);
fputs(aux, f);
}
}
fclose(f);
}
int NUMEROS_AL_PROFE(void){
int num;
num = rand() % 17 + 1;
num = num + 1;
return num;
}
不要将你的函数命名为ALLCAPS。这只适用于宏和常量;我试过使用链接代码,但也不起作用:在标识符、文本、文件名和注释中混合使用英语和{locale}是不好的做法。不是一个,就是另一个。因为第三方函数是英文的,如果你想要一致的可读性,就使用它。而且代码不需要在FGET和FPUT之间进行定位操作,因为这是明确允许的,FGET返回一个指示EOF和FPUT的空指针。通常-这是一个例外-在模式中,您需要在每次读写或写读操作之间进行定位操作rewind、fseek等,以+打开文件进行更新。这是最好的!!!!!谢谢,兄弟,我的错误就在这里,而我却错过了最后一次。