使用 File IO 和 2Darray 比较 C 语言中的字符串错误

杭维

我的程序用于删除数据文件中的记录。我会要求用户输入他要删除的“记录号”。但是,当我使用 strcmp 这个函数比较两个字符串时,它不起作用。

问题:无法使用 strcmp 删除某些记录并将更新的数据放入新文件中

这是我的代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(){
    Del_menu();
    return 0;
}

// function1
int Del_menu() {
    while (1) {
          printf("Please enter a record number you wanted to delete : ");
          Del();
          printf("\nDo u want to delete  other record? Enter 'y' for yes and 
          'n' for no :");
          char ans;
          scanf(" %c", &ans);
          if (ans == 'N' || ans == 'n') {
          break;
          }
    }
}

//function2
int Del(){

        FILE *sfr = fopen("stock.txt", "r"); 
        //just for me getting total number,you can igone this
        char *str;
        int total;
        total=0;
    while (!feof(sfr)){
        str = fgetc(sfr);
        if(str == '\n') {
        total++;
        }
    }
        total = (total/9);
        fclose(sfr);

        FILE *fileptr1, *fileptr2;
        char filename[40] = "data.txt";
        int total = 0;  
        int  total_1 = 0 ,total_2 = 0, i = 0 , temp;

   char itemrecord [40][40];
   char quantity [40][40];
   char weight [40][40];
   char itemname [40][40];
   char catagory [40][40];
   char recipient [40][40];
   char final_destination [40][40];
   char status [40][40];

        fseek(stdin, 0, SEEK_END);
        fflush(stdin);

        i++;
        total--;
        }

        FILE *fileptr1, *fileptr2;
        char filename[40]="stock.txt";

        fileptr1 = fopen(filename, "r");

        char buffer [50];
    while(total_1!=0){

  fgets(recordnum[i],50,fileptr1);
  fgets(itemname[i],50,fileptr1);
  fgets(itemrecord[i],50,fileptr1);
  fgets(catagory[i],50,fileptr1);
  fgets(quantity[i],50,fileptr1);
  fgets(weight[i],50,fileptr1);
  fgets(recipient[i],50,fileptr1);
  fgets(final_destination[i],50,fileptr1);
  fgets(status[i],50,fileptr1);
  fgets(buffer, 50,fileptr1);
        fclose(fileptr1);
        fclose(fileptr2);
        i++;
        total_1--;
  }

        char del_data[41]; //get user input
        fgets(del_data,50,stdin);
        del_data[strlen(del_data) - 1] = '\0';
        printf("\nyou have entered :%s\n", del_data);

        printf("\nRecord in file before delete:\n");
        printf("Total record: %d\n",total);

        i=0;
    while(total_2!=0){

       printf("%s%s%s%s%s%s%s%s%s\n",recordnum[i],itemrecord[i],quantity[i],
       weight[i],itemname[i], catagory[i],recipient[i],
       final_destination[i],status[i]);
       i++;
       total_2--;
    }

       rewind(fileptr1);

       fseek(stdin, 0, SEEK_END);
       fileptr2 = fopen("copy.c", "w");  //stored the data after deleted
       total_3=total_3 -1;

       i=0; 
    while(total!=0){

       if ( strcmp(recordnum[i],del_data) != 0){
       printf("%s",recordnum[i]); //for me checking is it successful              

       fprintf(fileptr2,"%s%s%s%s%s%s%s%s%s\n",recordnum[i],itemrecord[i],
       quantity[i],weight[i],itemname[i], catagory[i],recipient[i],
       final_destination[i],status[i]);

       i++; total--;}
            }


remove(filename);
// rename the file copy.c to original name
rename("copy.c", filename);
} // end of function 2

结果:

Please enter a record runber you want to delete: 1001

You enterd: 1001

Record in file before deleted:
Total:3
1001
Orange Laptop Computer DX5
235524
Electronics
1
1.8 kg
Chan 
Mong Kok
Delivery

1002
Japanese Garden Pear Gift Box
300522
Food
2
4.2 kg
Cheung 
Yuen Long
Arrival

1003
Koppo Badminton Racket GPX-15
77524
Fashion
3
0.6 kg
Lee Siu Yu
Fortress Hill
Warehouse

1001 // not exist after i finish this code
1002 // just for I debugging now
1003 // here is my problem* mean that cannot delete record successful

DO you want to delete other record?Enter'y' for yes, 'n' for no: n
约翰·博林格

当您读取用户的选择时,您会小心地删除fgets()存储在缓冲区中的尾随换行符,但您不会对读入数组的数据应用相同的处理方式。您的文件似乎将每个字段都放在单独的行上,因此您读入数组的数据中确实有换行符。因此比较失败,因为字符串确实不同。

最简单的解决方案是停止从用户输入中去除尾随换行符。这段代码还有很多其他问题,但是进行更改至少应该使它在您询问的方面发挥作用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用给定的字符串在 2dArray 中找到所有可能的组合

来自分类Dev

C 语言中通过 fgets() 比较红色字符串的 \n 时出现分段错误

来自分类Dev

比较C语言中的字符串数组

来自分类Dev

关于C语言中的数组和字符串的困惑

来自分类Dev

C语言中的结构和字符串

来自分类Dev

使用C语言中的“ sscanf”函数解析字符串中的子字符串

来自分类Dev

核心语言中的字符串比较

来自分类Dev

如何使用可比的C#比较泛型中的字符串和整数

来自分类Dev

在字符串C语言中查找空格和字母数字字符

来自分类Dev

C语言中的%d和%p printf格式字符串指令之间的区别?

来自分类Dev

在C语言中,“字符串” [4]这样的含义和含义是什么?

来自分类Dev

如何在Google查询语言中使用子字符串和charindex

来自分类Dev

使用System.IO.StreamWriter和长字符串Json的C#文件限制

来自分类Dev

将字符串与在Python 2和3中均可使用的字节进行比较

来自分类Dev

比较C#中的字符串和对象

来自分类Dev

C ++中字母和字符串的比较

来自分类Dev

比较std :: string和C样式的字符串文字

来自分类Dev

在C中比较和定义字符串

来自分类Dev

使用strsep在C语言中解析字符串(替代方法)

来自分类Dev

在C语言中使用“ fscanf”如何分割两个字符串?

来自分类Dev

如何在C语言中将字符串与结构一起使用?

来自分类Dev

我在C语言中使用递归来反转字符串的方式

来自分类Dev

如何使用awk来截取和比较字符串?

来自分类Dev

数组列表和字符串比较的使用

来自分类Dev

使用hashcode()和length()进行字符串比较

来自分类Dev

比较和排序多种语言的字符串

来自分类Dev

在C语言中使用FILE变量的地址和FILE *有什么区别?

来自分类Dev

使用递归比较C中的2个字符串

来自分类Dev

C:使用结构比较文件中的2个字符串

Related 相关文章

  1. 1

    如何使用给定的字符串在 2dArray 中找到所有可能的组合

  2. 2

    C 语言中通过 fgets() 比较红色字符串的 \n 时出现分段错误

  3. 3

    比较C语言中的字符串数组

  4. 4

    关于C语言中的数组和字符串的困惑

  5. 5

    C语言中的结构和字符串

  6. 6

    使用C语言中的“ sscanf”函数解析字符串中的子字符串

  7. 7

    核心语言中的字符串比较

  8. 8

    如何使用可比的C#比较泛型中的字符串和整数

  9. 9

    在字符串C语言中查找空格和字母数字字符

  10. 10

    C语言中的%d和%p printf格式字符串指令之间的区别?

  11. 11

    在C语言中,“字符串” [4]这样的含义和含义是什么?

  12. 12

    如何在Google查询语言中使用子字符串和charindex

  13. 13

    使用System.IO.StreamWriter和长字符串Json的C#文件限制

  14. 14

    将字符串与在Python 2和3中均可使用的字节进行比较

  15. 15

    比较C#中的字符串和对象

  16. 16

    C ++中字母和字符串的比较

  17. 17

    比较std :: string和C样式的字符串文字

  18. 18

    在C中比较和定义字符串

  19. 19

    使用strsep在C语言中解析字符串(替代方法)

  20. 20

    在C语言中使用“ fscanf”如何分割两个字符串?

  21. 21

    如何在C语言中将字符串与结构一起使用?

  22. 22

    我在C语言中使用递归来反转字符串的方式

  23. 23

    如何使用awk来截取和比较字符串?

  24. 24

    数组列表和字符串比较的使用

  25. 25

    使用hashcode()和length()进行字符串比较

  26. 26

    比较和排序多种语言的字符串

  27. 27

    在C语言中使用FILE变量的地址和FILE *有什么区别?

  28. 28

    使用递归比较C中的2个字符串

  29. 29

    C:使用结构比较文件中的2个字符串

热门标签

归档