如何用C语言逐行读取文件中的整数组?
- 内容介绍
- 文章标签
- 相关推荐
本文共计604个文字,预计阅读时间需要3分钟。
为了优雅地读取包含多个整数的文本文件,你可以使用C语言中的`fgets()`函数来逐行读取文件内容,并使用`sscanf()`或`strtol()`函数来解析每一行中的整数。以下是一个简单的示例代码,展示如何实现这一功能:
c#include #include #include
int main() { FILE *file=fopen(numbers.txt, r); if (file==NULL) { perror(Error opening file); return 1; }
char line[1024]; // 假设每行不超过1023个字符 while (fgets(line, sizeof(line), file)) { // 使用strtol来解析整数,并忽略前导空白 char *endptr; long number=strtol(line, &endptr, 10);
// 检查是否有额外的数字 while (*endptr !='\0' && *endptr !='\n') { if (sscanf(endptr, %ld, &number)==1) { // 输出解析到的整数 printf(%ld\n, number); // 移动指针到下一个数字 endptr=strchr(endptr, ' '); if (endptr==NULL) { break; } endptr++; } else { // 如果当前字符不是数字或空格,则跳过当前行 break; } } }
fclose(file); return 0;}
这段代码首先尝试打开名为numbers.txt的文件。如果文件打开成功,它会逐行读取文件内容。对于每一行,它使用`strtol()`函数来解析第一个整数,然后检查该行是否包含更多的整数。如果包含,它会继续解析直到行尾。注意,这里假设每行中的整数之间只有一个空格分隔。
请确保你的文本文件名为numbers.txt,并且它位于与你的程序相同的目录中。如果文件名或路径不同,请相应地修改`fopen()`函数中的参数。
我有一个文本文件,每行包含一个或多个整数,由空格分隔.我怎样才能以优雅的方式用C读到这个?如果我不关心行,我可以使用cin>>,但重要的是哪一行是整数.输入示例:
1213 153 15 155 84 866 89 48 12 12 12 58 12 这取决于您是想逐行还是全套.将整个文件转换为整数向量:
int main() { std::vector<int> v( std::istream_iterator<int>(std::cin), std::istream_iterator<int>() ); }
如果您想以每行为单位进行处理:
int main() { std::string line; std::vector< std::vector<int> > all_integers; while ( getline( std::cin, line ) ) { std::istringstream is( line ); all_integers.push_back( std::vector<int>( std::istream_iterator<int>(is), std::istream_iterator<int>() ) ); } }
本文共计604个文字,预计阅读时间需要3分钟。
为了优雅地读取包含多个整数的文本文件,你可以使用C语言中的`fgets()`函数来逐行读取文件内容,并使用`sscanf()`或`strtol()`函数来解析每一行中的整数。以下是一个简单的示例代码,展示如何实现这一功能:
c#include #include #include
int main() { FILE *file=fopen(numbers.txt, r); if (file==NULL) { perror(Error opening file); return 1; }
char line[1024]; // 假设每行不超过1023个字符 while (fgets(line, sizeof(line), file)) { // 使用strtol来解析整数,并忽略前导空白 char *endptr; long number=strtol(line, &endptr, 10);
// 检查是否有额外的数字 while (*endptr !='\0' && *endptr !='\n') { if (sscanf(endptr, %ld, &number)==1) { // 输出解析到的整数 printf(%ld\n, number); // 移动指针到下一个数字 endptr=strchr(endptr, ' '); if (endptr==NULL) { break; } endptr++; } else { // 如果当前字符不是数字或空格,则跳过当前行 break; } } }
fclose(file); return 0;}
这段代码首先尝试打开名为numbers.txt的文件。如果文件打开成功,它会逐行读取文件内容。对于每一行,它使用`strtol()`函数来解析第一个整数,然后检查该行是否包含更多的整数。如果包含,它会继续解析直到行尾。注意,这里假设每行中的整数之间只有一个空格分隔。
请确保你的文本文件名为numbers.txt,并且它位于与你的程序相同的目录中。如果文件名或路径不同,请相应地修改`fopen()`函数中的参数。
我有一个文本文件,每行包含一个或多个整数,由空格分隔.我怎样才能以优雅的方式用C读到这个?如果我不关心行,我可以使用cin>>,但重要的是哪一行是整数.输入示例:
1213 153 15 155 84 866 89 48 12 12 12 58 12 这取决于您是想逐行还是全套.将整个文件转换为整数向量:
int main() { std::vector<int> v( std::istream_iterator<int>(std::cin), std::istream_iterator<int>() ); }
如果您想以每行为单位进行处理:
int main() { std::string line; std::vector< std::vector<int> > all_integers; while ( getline( std::cin, line ) ) { std::istringstream is( line ); all_integers.push_back( std::vector<int>( std::istream_iterator<int>(is), std::istream_iterator<int>() ) ); } }

