美好的一天。不知道之前是否曾经问过这个问题。任何人,我有一个文本文件,内容如下
AP0003;Football;13.50;90
AP0004;Skateboard;49.90;30
基本上是,
Item Code;Item Name;Price per unit;Quantity
我正在尝试将文本文件的内容放入数组中,但到目前为止我还没有运气。并且,我在Stack Overflow上找不到类似的东西(或者我的搜索参数可能不准确)。非常感谢我能得到的任何帮助。我是C编程的新手。
答案 0 :(得分:2)
首先使用fopen
打开文件:
FILE* fp = fopen("NAME_OF_FILE.txt", "r"); // "r" stands for reading
现在,检查它是否已打开
if(fp == NULL) //If fopen failed
{
printf("fopen failed to open the file\n");
exit(-1); //Exit program
}
假设这些是存储行的数组,每个数据都是:
char line[2048]; //To store the each line
char itemCode[50];
char item[50];
double price;
int quantity; //Variables to store data
使用fgets
阅读文件。它逐行消耗。将它放在一个循环中,当fgets
返回NULL
时,它会终止,以逐行扫描整个文件。然后使用sscanf
从扫描的行中提取数据。在这种情况下,如果成功,它将返回4:
while(fgets(line, sizeof(line), fp) != NULL) //while fgets does not fail to scan a line
{
if(sscanf(line, "%[^;];%[^;];%lf;%d", itemCode, item, price, quantity) != 4) //If sscanf failed to scan everything from the scanned line
//%[^;] scans everything until a ';'
//%lf scans a double
//%d scans an int
//Better to use `"%49[^;];%49[^;];%lf;%d"` to prevent buffer overflows
{
printf("Bad line detected\n");
exit(-1); //Exit the program
}
printf("ItemCode=%s\n", itemCode);
printf("Item=%s\n", item);
printf("price=%f\n", price);
printf("Quantity=%d\n\n", quantity); //Print scanned items
}
最后,使用fclose
关闭文件:
fclose(fp);
答案 1 :(得分:1)
您可以尝试以下代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str1[1000],ch;
int i=0;
FILE *fp;
fp = fopen ("file.txt", "r"); //name of the file is file.txt
while(1)
{
fscanf(fp,"%c",&ch);
if(ch==EOF) break; //end of file
else str[i++]=ch; //put it in an array
}
fclose(fp);
return(0);
}
这会将整个文件放入数组str中,包括&#39; \ n&#39;和其他特殊字符。如果您不希望特殊字符在while循环中添加必要条件。