Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.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_Io_Stdin - Fatal编程技术网

如何在C中逐行读取或存储整数?

如何在C中逐行读取或存储整数?,c,io,stdin,C,Io,Stdin,我试着读一行数字,并对它们做一些计算。然而,我需要把它们一行一行地分开,但我不知道怎么做。这是我的密码: int main() { int infor[1024]; //2-d array perhaps?? int n, i; i=0; int imgWidth, imgHeight, safeRegionStart, safeRegionWidth; FILE *fp; fp = stdin; while (!feof(fp))

我试着读一行数字,并对它们做一些计算。然而,我需要把它们一行一行地分开,但我不知道怎么做。这是我的密码:

int main()
{
    int infor[1024]; //2-d array perhaps??
    int n, i;

    i=0;

    int imgWidth, imgHeight, safeRegionStart, safeRegionWidth;
    FILE *fp;

    fp = stdin;

    while (!feof(fp))
    {
        fscanf(fp, "%d", &infor[i++]);
    }
}

输入如下所示:

4 3 1 2 -16777216 -16711936 -65536 -16777216 -1 -65536 -65536 -16711936 -16777216 -65536 -16711936 -16777216     
3 4 1 1 -16777216 -16711936 -1 -1 -65536 -16777216 -16777216 -65536 -1 -1 -65536 -16711936 
有人能解释一下如何从一行移动到另一行吗


编辑:

int main()
{
    FILE * fp = stdin;
    char buffer[1024];
    long arr[2][16];

    int i = 0,
        j = 0;

    char * pEnd;

    while(fgets(buffer, sizeof(buffer), fp))
    {
        j = 0;
        if(buffer[0] == '\n')
            continue;

        pEnd = buffer;
        while(*pEnd != '\0')
        {
            arr[i][j++]=strtol(pEnd,&pEnd,10);
        }

        i++;
    }

    int imgWidth,
        imgHeight,
        safeRegionStart,
        safeRegionWidth;

    imgWidth = arr[1][0];
    imgHeight = arr[1][1];
    safeRegionStart = arr[1][2];
    safeRegionWidth = arr[1][3];

    printf("Value of i is %d\n", i);
    printf("%d %d %d %d ",
           imgWidth,
           imgHeight,
           safeRegionStart,
           safeRegionWidth);

    return 0;
}

我认为您的2D数组想法可能是正确的,特别是如果您希望保持数据点分离的话。使用
fgets
将每一行作为字符串输入,然后使用带有
sscanf
的循环将单个数字解析为数组的一行。可以使用类似于
strtol
的函数代替
sscanf
步骤直接获取数字

例如*(您需要调整缓冲区的大小和数组的尺寸,但对于您提供的数据文件): (对标准DIN方法进行了编辑)

#包括
int main(){
字符缓冲区[1024];
长arr[2][16];
int i=0,j=0;
char*pEnd;
文件*fp=stdin;
while(fgets(buffer,sizeof(buffer),fp))
{
j=0;
如果(缓冲区[0]='\n')
继续;
pEnd=缓冲区;
而(*pEnd!='\0')
{
arr[i][j++]=strtol(pEnd和pEnd,10);
}
i++;
}
fclose(fp);
printf(“arr[0][0]=%d arr[0][1]=%d arr[0][2]=%d\n”,arr[0][0],arr[0][1],arr[0][2]);
printf(“arr[1][0]=%d arr[1][1]=%d arr[1][2]=%d\n”,arr[1][0],arr[1][1],arr[1][2]);
}
exe名为
rowdata2
,文本文件名为
rowdata.txt
,因此我将其作为
rowdata2
运行,并得到了正确的结果


[*]它不会赢得任何选美比赛

当我执行arr[1][0],arr[1][1],arr[1][2]时,它似乎不适合输出正确的值,而arr[0][n]只适用于arr[0]。有什么原因吗?如果我输出得到的值
arr[1][0]=3/arr[1][1]=4/arr[1][2]=1
。你得到的价值观是什么?如果你愿意,把当前代码作为你问题的附录发布。我得到了0,0,0,。唯一的问题是,我将*fp设为stdin,而不是显式地给它一个文件名,我不确定这是否有区别。@user373466将其设为
stdin
确实有区别,因为您必须手动输入这些值(或者我想是通过重定向输入)。@user373466如果您手动输入它们,您需要在一行中输入顶行中由空格分隔的所有数字,然后按enter键。除非您通过不同的方式进行输入,否则不能在每次输入后按enter键。我不是手动输入的。我正在尝试从命令行(Stdin)读取,因为不会给我文件名…@user373466如何重定向这些值?也许更多地了解这个过程将有助于找出最佳的方法。就目前情况而言,使用我给你的代码,它意味着从一个按照你指示的方式格式化的文件中读取数据。我只是通过命令行重定向,即a.exe #include <stdio.h> int main(){ char buffer[1024]; long arr[2][16]; int i = 0,j=0; char * pEnd; FILE *fp = stdin; while(fgets(buffer,sizeof(buffer),fp)) { j=0; if(buffer[0]=='\n') continue; pEnd = buffer; while(*pEnd !='\0') { arr[i][j++]=strtol(pEnd,&pEnd,10); } i++; } fclose(fp); printf("arr[0][0]=%d arr[0][1]=%d arr[0][2]=%d\n",arr[0][0],arr[0][1],arr[0][2]); printf("arr[1][0]=%d arr[1][1]=%d arr[1][2]=%d\n",arr[1][0],arr[1][1],arr[1][2]); }