如何将C分割文件分成两个双数组。我有X和Y位置保存在文件txt中,如:
X
3
5
7
12
Y
2
4
5
实际上我有代码找到“Y”的行位置,但我不知道如何在“Y”之后保存数字。
while(fgets(temp, 512, plik) !=NULL) {
if((strstr(temp,"Y"))!=NULL) {
printf("A match found on line %d\n", line_num);
positionY = line_num;
printf("\n%s\n", temp);
find_result++;
}
line_num++;
}
if(find_result == 0) {
printf("dont find");
}
我的第二个问题是如何离开X并将数字保存到“Y” 我有tabX和tabY来保存数字,它们是动态分配的。
答案 0 :(得分:1)
x.txt
X
1
2
3
Y
4
5
6
Foo.cpp中
#include <stdio.h>
#include <string.h>
int main()
{
FILE *fp = fopen("x.txt", "r");
int insertInX = 0, insertInY = 0;
char buf[512] = "";
if(!fp)
return -1;
while(fgets(buf, 511, fp) != NULL)
{
if(strncmp(buf, "X", 1) == 0)
{
insertInX = 1;
//insertInY = 0;
continue;
}
if(strncmp(buf, "Y", 1) == 0)
{
insertInY = 1;
//insertInX = 0;
continue;
}
if(insertInY)
{
//Add to Y
printf("In Y : %s\n", buf);
continue;
}
if(insertInX)
{
//Add to X
printf("In X : %s\n", buf);
//continue;
}
}
return 0;
}
输出:
In X : 1
In X : 2
In X : 3
In Y : 4
In Y : 5
In Y : 6
答案 1 :(得分:0)
您有两个阵列,X
和Y
。还要添加另一个变量,一个可以指向任一阵列的指针。
然后当您在输入中看到"X"
时,您将指针指向X
数组,如果在输入中看到"Y"
,则指针指向Y
数组。然后对于所有数字,只需将它附加到指针指向的数组。
请记住,指针不需要保存,因此每次读取数字时都可以增加指针,使其指向数组中的下一个项目。
你应该小心,不要写出数组的界限,因为这会导致undefined behavior。
有两种方法可以解决这个问题:
一个是有另一个指针,你指向超出数组末尾的指针(例如通过执行end_ptr = Y + size
),然后确保写指针永远不会到达结束指针
另一种方法是使另一个指针始终指向数组的开头,以及数组的大小。您可以通过write_pointer - start_pointer
获取当前索引到数组中,如果索引等于或大于您超出范围的大小。
答案 2 :(得分:0)
假设tabY和tabY已经分配了大小tab_size
,您可以这样做:
int afterX = 0;
int afterY = 0;
int val;
int *pX = tabX;
int *pY = tabY;
while(fgets(temp, 512, plik) !=NULL) {
if((strstr(temp,"X"))!=NULL) {
printf("A match for X found on line %d\n", line_num);
positionX = line_num;
printf("\n%s\n", temp);
find_result++;
afterY = 0;
afterX = 1;
}
else if((strstr(temp,"Y"))!=NULL) {
printf("A match found on line %d\n", line_num);
positionY = line_num;
printf("\n%s\n", temp);
find_result++;
afterY = 1;
afterX = 1;
}
else {
val = atoi(tmp);
if (afterY) {
if (pY - tabY < tab_size) {
*(pY++) = val;
}
else {
printf("More than %d values in Y\n", size);
}
}
else if (afterX) {
if (pX - tabX < tab_size) {
*(pX++) = val;
}
else {
printf("More than %d values in X\n", size);
}
}
}
line_num++;
}
if(find_result == 0) {
printf("dont find");
}