逐行读取一个文件,并用逗号将每个字符扫描成C语言中的独立变量
必须读取文件.txt,格式如下: 12AA,abc12\n 4CCC,cde15\n 我想逐行读取文件,并将逗号分隔的值存储在单独的变量中逐行读取一个文件,并用逗号将每个字符扫描成C语言中的独立变量,c,file-io,C,File Io,必须读取文件.txt,格式如下: 12AA,abc12\n 4CCC,cde15\n 我想逐行读取文件,并将逗号分隔的值存储在单独的变量中 fp = fopen("file.txt", "r"); while(fgets(buffer, 255, (FILE*) fp)) { fscanf(fp, "%s %s", acc_no, package); printf("%s\n", acc_no); printf("%s\n", package); } fclose(
fp = fopen("file.txt", "r");
while(fgets(buffer, 255, (FILE*) fp))
{
fscanf(fp, "%s %s", acc_no, package);
printf("%s\n", acc_no);
printf("%s\n", package);
}
fclose(fp);
我不仅希望读取和打印变量,还希望将它们存储在单独的变量中。关于如何做的建议?strchr()
可以帮助:
while (fgets(str, sizeof str, fp)) {
char *arr[2], *ptr;
arr[0] = str;
if ((ptr = strchr(str, ','))) {
arr[1] = ptr + 1;
*ptr = '\0';
} else {
exit(EXIT_FAILURE);
}
printf("<%s> <%s>\n", arr[0], arr[1]);
}
您可以改为使用fscanf格式字符串
fscanf(fp, " %[^,\n], %[^\n]", values[i][0], values[i][1]);
像这样
#include <stdio.h>
int main() {
FILE* fp = fopen("file.txt", "r");
char values[1000][2][100];
int i = 0;
while(!feof(fp)) {
fscanf(fp, " %[^,\n], %[^\n]", values[i][0], values[i][1]);
printf("%s %s\n", values[i][0], values[i][1]);
}
}
#包括
int main(){
FILE*fp=fopen(“FILE.txt”、“r”);
字符值[1000][2][100];
int i=0;
而(!feof(fp)){
fscanf(fp,“%[^,\n],%[^\n]”,值[i][0],值[i][1]);
printf(“%s%s\n”,值[i][0],值[i][1]);
}
}
fscanf
格式字符串:
=跳过前导空格(如前一行的换行符)
=读取字符串直到,但不包括“,”或“\n”%[^,\n]
=需要逗号并放弃它,
=读取字符串直到但不包括“\n”%[^\n]
values
是一个二维字符串数组,包含1000行和2列。每个元素是一个最大长度为100个字符的字符串
另外,如果您使用
%m[^,\n]
,fscanf将为读取的字符串分配内存。strok可能会有所帮助。因此,如果每一行都是变量,您可以在读取整个文件之前读取,之后,您可以使用malloc
分配堆中的所有变量。将指针移回文件的开头,并执行将字符串存储在已分配的变量中的操作。就这些,没什么了!(注意:如果你需要一个值而不是字符串,你需要使用C库的函数来转换它们:strod(…)
就是其中之一-)这个:while(fgets(buffer,255,(FILE*)fp))
为什么你要把本来应该是文件*
的东西转换成文件*
?+1,这是一个完整的答案。在代码中添加一些注释来解释您所做的事情(对于新手)可能是一个额外的步骤value@Leos313,是的,添加了一些注释(即使函数名非常具有描述性:P)
#include <stdio.h>
int main() {
FILE* fp = fopen("file.txt", "r");
char values[1000][2][100];
int i = 0;
while(!feof(fp)) {
fscanf(fp, " %[^,\n], %[^\n]", values[i][0], values[i][1]);
printf("%s %s\n", values[i][0], values[i][1]);
}
}