Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C语言从文本文件中读取逗号分隔的数字(坐标)_C_File - Fatal编程技术网

用C语言从文本文件中读取逗号分隔的数字(坐标)

用C语言从文本文件中读取逗号分隔的数字(坐标),c,file,C,File,我试图从一个包含1000行数字的文本文件中读取C中的一些数字,例如: -340,495,-153,-910,835,-947 -175,41,-421,-714,574,-645 -547,712,-352,579,951,-786 419,-864,-83,650,-399,171 ... 但是当我执行代码时,我看到I变量从901开始,而不是0,因此它读取从I=901点到I=999点的数字。这就是我遇到问题的地方 我尝试使用while循环而不是for循环来避免额外的I变量:

我试图从一个包含1000行数字的文本文件中读取C中的一些数字,例如:

-340,495,-153,-910,835,-947  
-175,41,-421,-714,574,-645  
-547,712,-352,579,951,-786  
419,-864,-83,650,-399,171  
...
但是当我执行代码时,我看到
I
变量从
901
开始,而不是
0
,因此它读取从
I=901
点到
I=999
点的数字。这就是我遇到问题的地方

我尝试使用
while
循环而不是
for
循环来避免额外的
I
变量:

while(!feof(file_in)){
fscanf(文件在“%d%*c%d%*c”、&a[0]、&a[1]中);
fscanf(文件在“%d%*c%d%*c”、&b[0]、&b[1]中);
fscanf(文件在“%d%*c%d%*c”、&c[0]、&c[1]中);
printf(“A(%d,%d)I=%d\n”,A[0],A[1],I);
printf(“B(%d,%d)I=%d\n”,B[0],B[1],I);
printf(“C(%d,%d)I=%d\n”,C[0],C[1],I);
}
这是我很难处理的代码部分:

A(-340,495) I=0  
B(-153,-910) I=0  
C(835,-947) I=0  
A(-175,41) I=1  
...
int main(无效){
文件*FILE_in;
int a[2];
int b[2];
int c[2];
文件_in=fopen(“triangles.txt”、“r”);
if(file_in==NULL){
printf(“无法打开文件进行读取。\n”);
出口(0);
}
否则{

对于(int i=0;i我认为您尚未演示该问题。这是对代码的轻微修改,向
stderr
报告错误,在出现错误时退出,等等

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int a[2];
    int b[2];
    int c[2];
    const char filename[] = "triangles.txt";
    FILE *file_in = fopen(filename, "r");

    if (file_in == NULL)
    {
        fprintf(stderr, "Can't open file %s for reading.\n", filename);
        exit(EXIT_FAILURE);
    }

    for (int i = 0; i < 1000; i++)
    {
        int r1 = fscanf(file_in, "%d%*c%d%*c", &a[0], &a[1]);
        int r2 = fscanf(file_in, "%d%*c%d%*c", &b[0], &b[1]);
        int r3 = fscanf(file_in, "%d%*c%d\n", &c[0], &c[1]);
        if (r1 != 2 || r2 != 2 || r3 != 2)
        {
            fprintf(stderr, "Failed to read data for i = %d: r1 = %d, r2 = %d, r3 = %d\n",
                    i, r1, r2, r3);
            exit(EXIT_FAILURE);
        }
        printf("A(%4d,%4d) I=%d\n", a[0], a[1], i);
        printf("B(%4d,%4d) I=%d\n", b[0], b[1], i);
        printf("C(%4d,%4d) I=%d\n", c[0], c[1], i);
    }
    fclose(file_in);
    return 0;
}
我得到输出:

A(-340, 495) I=0
B(-153,-910) I=0
C( 835,-947) I=0
A(-175,  41) I=1
B(-421,-714) I=1
C( 574,-645) I=1
A(-547, 712) I=2
B(-352, 579) I=2
C( 951,-786) I=2
A( 419,-864) I=3
B( -83, 650) I=3
C(-399, 171) I=3
Failed to read data for i = 4: r1 = -1, r2 = -1, r3 = -1
当然,最后一行出现在标准错误上;其余的写在标准输出上


因此,我认为您的问题不在显示的代码中。

请注意。请注意,如果无法打开该文件,您将尝试使用空指针调用
fclose()
。这不会带来快乐。只有在成功打开文件后才关闭该文件。通常,最好“快速失败”-报告错误(在
stderr
上,而不是
stdout
)并退出,剩下的代码缩进少一级。您提供的内容非常接近MCVE(),但我认为您应该省略对
consistorigin()的调用
因为您没有提供该代码。如果忽略该调用时发现程序正常工作,则表明显示的位置错误。您还应该检查对
fscanf()
的每次调用的返回值,以确保获得预期的值。目前,您不知道什么时候出错。正在移动
fclose()
是主要的替代方案;这也是有效的。--您主要是测试
循环代码还是
的while
循环代码?我不知道
I
如何使用
循环得到错误的值,但是如果您没有真正使用
I
的while
循环,尤其是如果您忘记使用
的话初始化它,那么您可能会看到901而不是0作为第一个值。不过,您似乎仍然在递增
i
。您如何检查程序的输出?如果您只是将输出转储到控制台,则可能只是超出了控制台的回滚。请检查控制台应用程序的设置。我猜是file我尝试读取的文件太大,以至于溢出了一些内容,因为当我为一个相对较小的文件执行代码时,一切都正常。这是指向我尝试读取的文件的链接,我尝试了上述代码的改编(将每行输入的三行输出平坦化为每行输入的一行输出)在您的大数据文件上,它工作正常(除了三个数字是
-1000
,这会使格式设置无效;
%5d
而不是
%4d
会恢复一致性)。
-340,495,-153,-910,835,-947  
-175,41,-421,-714,574,-645  
-547,712,-352,579,951,-786  
419,-864,-83,650,-399,171
A(-340, 495) I=0
B(-153,-910) I=0
C( 835,-947) I=0
A(-175,  41) I=1
B(-421,-714) I=1
C( 574,-645) I=1
A(-547, 712) I=2
B(-352, 579) I=2
C( 951,-786) I=2
A( 419,-864) I=3
B( -83, 650) I=3
C(-399, 171) I=3
Failed to read data for i = 4: r1 = -1, r2 = -1, r3 = -1