我写了一个程序来获取用户输入并将其写入文本文件但是在获得两个输入后它卡住了

问题描述

我编写了一个程序来获取用户输入并将其写入文本文件但在获得两个输入后它卡住了。它不停地重复。如果我输入两个用户的详细信息,它会在该部分的 while(!feof(fp)) 中重复。但不断输入相同的用户输入它可以正常工作。

#include <stdio.h>

int main(){
    FILE *fp;
    int i,flag = 0;
    char loyaltyNumber[10],loyaltyFile[10];
    char userInput[30];
    char fileInput[30];
    
    fp = fopen("loyalty.dat","w");
    
    if ( fp == NULL)
    {
        printf("Cannot create file\n");  //checking file can be created or not
        return -1;
    }

    fprintf(fp,"7728369210 Dinesh\n");
    fprintf(fp,"7773457219 Subash\n");
    
    fclose(fp);
    
    fp = fopen("loyalty.dat","a+");
    
    if ( fp == NULL)
    {
        printf("Cannot create file\n");  //checking file can be created or not
        return -1;
    }
    
    for (i = 0; i < 5; i++){
        printf("Enter loyalty number<space>Custormer name : ");
        scanf("%s %s",&loyaltyNumber,&userInput);
        
        while (!feof(fp)){
            flag = 0;
            if (strcmp(loyaltyFile,loyaltyNumber) == 0){
                printf("Already exsisted\n");
                flag = 1;
                break;
            }
            fscanf(fp,"%s %s",&loyaltyFile,&fileInput);
        }
        
        if (flag == 0){
            fprintf(fp,loyaltyNumber,userInput);
        }   
    }
    
    fclose(fp);
    return 0;
}

解决方法

不要在 &%s 中将 scanf()fscanf() 一起使用,而是将 fscanf(fp,"%s %s",&loyaltyFile,&fileInput); 替换为 fscanf(fp,loyaltyFile,fileInput);scanf("%s %s",&loyaltyNumber,&userInput);scanf("%s %s",loyaltyNumber,userInput);。另外 loyaltyNumber 包含一个有 10 个字符的字符串,因此您应该将数组大小设置为 11 而不是 10,因为它没有足够的空间将 \0 放在数组的末尾并且将 fseek(fp,SEEK_SET); 放在 for (i = 0; i < 5; i++){ 之后以将文件指针更改为文件的开头,因为对于每次迭代,您都会检查 strcmp(loyaltyFile,loyaltyNumber) == 0 是否直到文件结尾。最后但并非最不重要的一点是,您还应该在 \n 的末尾放置一个 fprintf(fp,userInput);