У меня есть текст, содержащий номера: 148,147,148,146,135,22,.... с почти 11000 номерами. Я хочу поместить каждое нечетное число -positioned (первое, третье...) в массив (148,148,135...) и каждый номер -positioned в другой (второй, четвертый..., то есть 147 146, 22...). Запустив следующий фрагмент кода, я получаю ошибку с ошибкой сегментации, и я не уверен, что числа правильно попадают в массивы. Вы можете помочь?
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main(){
ifstream infile;
int arraya[11000];
int arrayb[11000];
int i=0;
int noum=0;
char cNum[10];
infile.open ("pairs.txt", ifstream::in);
if (infile.is_open())
{
while (infile.good())
{
infile.getline(cNum, 256, ',');
if ( i % 2== 0 )
arraya[i]= atoi(cNum);
else
arrayb[i]= atoi(cNum) ;
i++ ;
}
infile.close();
}
else
{
cout << "Error opening file";
}
for (i=0; i<10;i++){
cout<<arraya[i];
cout<<",";
cout<<arrayb[i];}
return 0;
}
Вам нужно иметь логическую переменную, объявляющую, если число четное или нечетное, оно также разрешено итератором и проверяет, является ли это% 2 == 0, это всего лишь одно из приложений:
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
using namespace std;
int main()
{
ifstream text;
text.open("yourfile", ifstream::in);
if (!text.is_open()) {
cerr << "Error opening file.";
return 1;
}
int arrayA[1000];
int arrayB[1000];
int iA = 0;
int noum = 0;
int iB = 0;
bool odd = true;
string cNum;
while(text >> cNum) {
noum = atoi(cNum.c_str());
if (!odd) {
arrayA[iA++] = noum;
odd = true;
} else {
arrayB[iB++] = noum;
odd = false;
}
}
text.close();
if (!odd)
for (int i = 0; i < iA; i++)
cout << arrayA[i] << ", " << arrayB[i] << endl;
else
for (int i = 0; i < iB; i++)
cout << arrayA[i] << ", " << arrayB[i] << endl;
return 0;
}
изменять
while (infile.good())
{
infile.getline(cNum, 256, ',');
в
while (infile.getline(cNum, 10, ',')) {
так как размер cNum
составляет всего 10.
Кроме того, как упоминал @synapse, вы пишете границы массива. Тебе нужно
if ( noum % 2== 0 )
arraya[i/2]= atoi(cNum);
else
arrayb[i/2]= atoi(cNum);
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main() {
ifstream infile;
int arraya[6000];
int arrayb[6000];
int iA = 0;
int iB = 0;
int noum = 0;
char cNum[10];
infile.open("pairs.txt", ifstream::in);
if (infile.is_open()) {
while (infile.getline(cNum, 256, ',')) {
noum = atoi(cNum);
if (noum % 2 == 0)
arraya[iA++] = noum;
else
arrayb[iB++] = noum;
}
infile.close();
} else {
cout << "Error opening file";
}
cout << "Even: " << endl;
for (int i = 0; i < iA; i++) {
cout << arraya[i];
cout << ",";
}
cout << std::endl;
cout << "Odd: " << endl;
for (int i = 0; i < iB; i++) {
cout << arrayb[i];
cout << ",";
}
return 0;
}