Mam plik tekstowy z liczbami zapisanymi tak:
005300000
800000020
070010500
400005300
010070006
003200080
060500009
004000030
000009700
musze zapisać każdą cyfrę osobno do tablicy 9x9 i nie jestem pewna jak to zrobić?
i nie jestem pewna jak to zrobić?
Czego nie jesteś pewna? Jakie rozwiązanie chodzi Ci po głowie?
musze zapisać każdą cyfrę osobno do tablicy 9x9 i nie jestem pewna jak to zrobić?
Najłatwiej — czytając cyfra po cyfrze. Alternatywnie, czytając linijka po linijce, i wyłuskując poszczególne znaki z wynikowego stringa.
char tb[9][9];
FILE *fd=fopen("file.txt","r");
for(int y=0;y<9;++y) for(int x=0;x<9;++x) fscanf(fd,"%c",&tb[y][x]);
@_13th_Dragon: a jak zrobić to w drugą stronę?
for(i = 0; i < 9; i++)
{
for(j = 0; j < 9; j++)
{
fprintf(Sudoku, "%d", a[i][j]);
if(i == 8)
{
fprintf(Sudoku, "\n");
}
}
}
napisałam coś takiego, ale zapisuje mi to tak:
1453276988396541276729185434961853722184739567532964813675428199847612355
2
1
8
3
9
7
6
4
Sway22 napisał(a):
@_13th_Dragon: a jak zrobić to w drugą stronę?
To co podałem to jest w ta drugą stronę (poprawną).
Problem polega na tym że nie jesteś w stanie poprawnie wyświetlić tablicy, a to dla tego że używasz nic nie znaczących w kontekście tablicy zmiennych i
,j
.
for(int y=0;y<9;++y,printf("\n")) for(int x=0;x<9;++x) printf(" %c",tb[y][x]);
Listing 1.
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
string fileName = "file.txt";
char ch;
fstream file;
int iW{9},iK{9},tab[iW][iK],i{0},j{0};
file.open(fileName, ios::in);
if (file)
{
file.get(ch);
while (file)
{
if(ch=='\n'){++i;j=0;}
else {
int cyfra = reinterpret_cast<int>(ch - '0');
tab[i][j] = cyfra;
++j;
}
file.get(ch);
}
file.close();
}
else
cout << "The file cannot be opened " << fileName << ".\n";
for(int m{0};m<iW;++m,cout<<"\n")
for(int n{0};n<iK;++n)cout<<tab[m][n]<< " ";
return 0;
}
Listing 2.
#include <iostream>
#include <fstream>
#include <cstring> //strlen
#include <sstream> //stringstream
#include <vector> //vector
using namespace std;
int main()
{
std::ifstream file;
file.open("file.txt", ios::in);
std::string line, temp;
int cyfra{0};
vector<vector<int>>vec;vector<int>v;
stringstream ss;
if( !file.good() )
{
cout << "The file cannot be opened" << endl;
}
else
{
while( getline(file,line) )
{
for(unsigned int i=0;i<line.size();++i)
{
ss<<line[i];ss>>temp;
if(stringstream(temp)>>cyfra){v.push_back(cyfra);}
temp = "";ss.clear();
}
vec.push_back(v);v.clear();
}
}
file.close();
for(const auto &w: vec){for(const auto &el: w){cout<<el<<" ";}cout<<'\n';}
cout<<'\n';
for(uint16_t m{0}; m<vec.size(); ++m,cout<<"\n")
for(uint16_t n{0}; n<vec[m].size(); ++n)cout<<vec[m][n]<< " ";
return 0;
}
Początkiem dobrego wykonania jest dobre myślenie, a tym pomaga prawidłowe słownictwo.
Do tablicy (elementu w pamięci RAM, nietrwałego) się nie ZAPISUJE ale co najwyżej WCZYTUJE