逐行读取一个文件,并用逗号将每个字符扫描成C语言中的独立变量

逐行读取一个文件,并用逗号将每个字符扫描成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(

必须读取文件.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);
我不仅希望读取和打印变量,还希望将它们存储在单独的变量中。关于如何做的建议?

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]);
    }   

}