东方耀AI技术分享

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 1057|回复: 2
打印 上一主题 下一主题

[C/C++] C中一行一行的读入文件的字符串

[复制链接]

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14441
QQ
跳转到指定楼层
楼主
发表于 2021-5-6 09:48:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <stdio.h>

  5. #define MAX 20

  6. //C中一行一行的读入文件的字符串

  7. void main(){

  8.         FILE *pf;
  9.         char buffer[MAX];
  10.         long int value=0;
  11.         int str_len=0;
  12.         char file_path[50] = "F:\\TWR\\ir_uwb_ori_data\\一个动目标_过道_1_0329.txt";
  13.         //char file_path[50] = "F:\\TWR\\ir_uwb_ori_data\\test01.txt";

  14.        
  15.         if((pf = fopen(file_path , "r")) == NULL)
  16.         {
  17.                 printf("打开文件失败!\n");
  18.                 exit(EXIT_FAILURE);
  19.                 /*
  20.         头文件 <stdlib> 中宏定义如下:
  21.         #define EXIT_FAILURE 1 表示程序执行失败
  22.         #define EXIT_SUCCESS 0 表示程序执行成功
  23.         */
  24.         }
  25.        
  26.        
  27.         while(!feof(pf))              //检测到文件末尾,返回非 0 值,否则返回 0 值
  28.         {
  29.                 fgets(buffer , MAX , pf);
  30.                 /*
  31.                 最多可读取 MAX - 1 个字符
  32.                 因为结尾处会自动添加一个 '\0' 字符串结束符
  33.                 当读取到换行符 '\n' 和文件结束符 EOF 时结束读取
  34.                 注意:'\n' 会被作为一个合法的字符读取
  35.                 注意:1.txt 文件中有中文,需要将其编码格式保存为 ANSI ,即当前系统编码 GBK 编码
  36.                 注意:1.txt 文件中最后一行有换行符存在,则最后一行将重复输出一次
  37.                 */
  38.                
  39.                 /*
  40.                 输出读取到的 '\n' 字符,即会自动换行
  41.                 */
  42.                 str_len = strlen(buffer);
  43.                 if (str_len == 0)
  44.                 {
  45.                         // 空字符串:本身就是 一定在末尾
  46.                         break;
  47.                 }
  48.                 buffer[str_len-1] = '\0';
  49.                 str_len = strlen(buffer);
  50.                 if (str_len == 0)
  51.                 {
  52.                         // 空字符串:原本有一个 \n的 可能在中间
  53.                         continue;
  54.                 }
  55.                 //字符串转数字
  56.                 value = atoi(buffer);
  57.                 //返回转换后的整型数;如果 str 不能转换成 int 或者 str 为空字符串,那么将返回 0
  58.                 printf("%s与其长度=%d;转数字=%d\n" , buffer, str_len, value);
  59.                
  60.         }

  61.         fclose(pf);

  62.         system("pause");
  63.         return ;
  64. }


  65. /************************************************************************/
  66. /* 【函数说明】atoi() 函数会扫描参数 str 字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过 isspace() 函数来检测),
  67. 直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。                                                                     */
  68. /************************************************************************/
复制代码


让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14441
QQ
沙发
 楼主| 发表于 2021-5-6 11:45:59 | 只看该作者
修改一个bug:
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <stdio.h>

  5. #define BUFFER_SIZE 15
  6. #define SAMPLE_NUM 768

  7. //C中一行一行的读入文件的字符串

  8. void main(){

  9.         FILE *pf;
  10.         char buffer[BUFFER_SIZE];
  11.         long int value=0;
  12.         int str_len=0;

  13.         double one_wave_ru[SAMPLE_NUM]={0};
  14.         int counter = 0;

  15.         //char file_path[50] = "F:\\TWR\\ir_uwb_ori_data\\一个动目标_过道_1_0329.txt";
  16.         char file_path[50] = "F:\\TWR\\ir_uwb_ori_data\\test_5_wave.txt";

  17.        
  18.         if((pf = fopen(file_path , "r")) == NULL)
  19.         {
  20.                 printf("打开文件失败!\n");
  21.                 exit(EXIT_FAILURE);
  22.                 /*
  23.         头文件 <stdlib> 中宏定义如下:
  24.         #define EXIT_FAILURE 1 表示程序执行失败
  25.         #define EXIT_SUCCESS 0 表示程序执行成功
  26.         */
  27.         }
  28.        
  29.        
  30.         while(!feof(pf))              //检测到文件末尾,返回非 0 值,否则返回 0 值
  31.         {
  32.                 fgets(buffer , BUFFER_SIZE , pf);
  33.                 /*
  34.                 最多可读取 BUFFER_SIZE - 1 个字符
  35.                 因为结尾处会自动添加一个 '\0' 字符串结束符
  36.                 当读取到换行符 '\n' 和文件结束符 EOF 时结束读取
  37.                 注意:'\n' 会被作为一个合法的字符读取
  38.                 注意:1.txt 文件中有中文,需要将其编码格式保存为 ANSI ,即当前系统编码 GBK 编码
  39.                 注意:1.txt 文件中最后一行有换行符存在,则最后一行将重复输出一次
  40.                 */
  41.                
  42.                 /*
  43.                 输出读取到的 '\n' 字符,即会自动换行
  44.                 */
  45.                 str_len = strlen(buffer);
  46.                 if (str_len == 0)
  47.                 {
  48.                         printf("空字符串:本身就是 一定在末尾 break出A\n");
  49.                         break;
  50.                 }
  51.                 buffer[str_len-1] = '\0';
  52.                 str_len = strlen(buffer);
  53.                 if (str_len == 0)
  54.                 {
  55.                         printf("空字符串:原本有一个回车换行 的 可能在中间 break出B\n");
  56.                         //continue;   // 不容许这样 怕乱套
  57.                         break;
  58.                 }
  59.                 //字符串转数字
  60.                 value = atoi(buffer);
  61.                 //整形转double吧
  62.                
  63.                 one_wave_ru[counter%SAMPLE_NUM] = value;
  64.                 printf("已放到数组的索引=%d;", counter%SAMPLE_NUM);

  65.                 if (counter%SAMPLE_NUM == (SAMPLE_NUM-1))
  66.                 {
  67.                         printf("------------------------------放满一个回波数据了,才能入队列\n");
  68.                 }

  69.                 counter++; // 会不会乱套?
  70.                 //返回转换后的整型数;如果 str 不能转换成 int 或者 str 为空字符串,那么将返回 0
  71.                 printf("计数器=%d;%s与其长度=%d;转数字=%d\n" , counter, buffer, str_len, value);

  72.                 //字符串 数组 清空  不清空最后会多一行
  73.                 memset(buffer, 0, sizeof(buffer));
  74.                
  75.         }
  76.         fclose(pf);

  77.         system("pause");
  78.         return ;
  79. }


  80. /************************************************************************/
  81. /* 【函数说明】atoi() 函数会扫描参数 str 字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过 isspace() 函数来检测),
  82. 直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。                                                                     */
  83. /************************************************************************/
复制代码
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

0

主题

98

帖子

200

积分

中级会员

Rank: 3Rank: 3

积分
200
板凳
发表于 2021-11-23 19:47:06 | 只看该作者
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|人工智能工程师的摇篮 ( 湘ICP备2020019608号-1 )

GMT+8, 2024-5-28 01:15 , Processed in 0.181855 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表