Καλησπέρα, θα ήθελα παρακαλώ να μου πείτε πως θα μπορούσα να εισάγω δεδομένα από txt αρχείο σε ένα πίνακα. Ψάχνω από το πρωί και αυτό που έχω καταλάβει είναι πως να δημιουργώ ένα αρχείο με την εντολή fopen αλλά δεν καταλαβαίνω πως να τα εισάγω στο πρόγραμμα μου. Έστω ένα αρχείο A.txt που έχει στοιχεία
1 2 3
4 5 6
7 8 9
και θέλω να το χρησιμοποιήσω στο πρόγραμμα με τη μεταβλητή a.
Παρακαλώ πολύ μπορείτε να μου πείτε πως γίνεται? Βρήκα διάφορα στο Internet και έχω μπερδευτεί. Δοκίμασα κάτι αλλά δε δουλεύει.Αν γνωρίζει κάποιος ένα βιβλίο που να έχει παραδείγματα σε αυτό που ζητάω παρακαλώ ενημερώστε με.
#include<stdio.h>
#include "stdafx.h"
#include<stdlib.h>
#include <iostream>
#include <fstream>
#include <omp.h>
using namespace std;
#define x1file "A"
int main()
{
FILE *fpx1;
double a[3][3];
if ( (fpx1=fopen(x1file, "r")) == NULL)
{
fprintf(stderr, "\n Error opening file! %s. \n", x1file);
}
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 3; j++)
{
x1file >> a[i][j];
}
}
fclose(fpx1);
return 0;
}
Ευχαριστώ πολύ.
Εμφάνιση 1-3 από 3
-
05-03-14, 14:43 Πως εισάγω δεδομένα από ένα αρχείο txt σε έναν πίνακα στη C? #1
-
07-03-14, 05:28 Απάντηση: Πως εισάγω δεδομένα από ένα αρχείο txt σε έναν πίνακα στη C? #2
http://www.tutorialspoint.com/c_stan...tion_fgets.htm
Βοηθάει αυτό αντί να τραβάς ένα χαρακτήρα κάθε φορά;
Επίσης μην ξεχνάς ότι και τα κενά θεωρούνται char αν έχεις κενά στο txt
Άκυρο τώρα είδα ότι θες να τα περάσεις σε πίνακα
όταν ορίζεις ως στααθερή το αρχείο σου δεν έπρεπε να έχει και το .txt ?
Χρησιμοποιείς bitshift operator επίσηςΤελευταία επεξεργασία από το μέλος JediMasterMANIAC : 07-03-14 στις 05:42.
Χρησιμοποιώ Arch Linux. Εσύ; Δοκίμασε το δεν χάνεις και τίποτα :)
Live CDs χωρίς να βγάλεις τα Windows: Ubuntu, OpenSUSE, Fedora.
Για πιο ολοκληρωμένη άποψη συνιστάται εγκατάσταση και αρκετή χρήση. Το Linux ΔΕΝ είναι Windows :)
Τί είναι το Linux ; δες εδώ και εδώ
Paintball team Last Chancers
-
07-03-14, 17:27 Απάντηση: Πως εισάγω δεδομένα από ένα αρχείο txt σε έναν πίνακα στη C? #3
Ο κώδικας που έχεις παραθέσει είναι συνονθύλευμα από C και C++. Για παράδειγμα, ανοίγεις (και κλείνεις) το αρχείο σου με C αλλά μετά προσπαθείς να διαβάσεις τα περιεχόμενά του στον πίνακα με C++ (εκεί που ο JediMasterMANIAC νόμιζε πως επιχειρείς shift operation).
Τα #include που έχεις συμπεριλάβει στον κώδικά σου υποδηλώνουν πως μάλλον θέλεις να το κάνεις με C++, αλλά στον τίτλο του νήματος ρωτάς για C. Οπότε δεν μου είναι ξεκάθαρο τελικά σε ποια γλώσσα από τις 2 θέλεις να γράψεις τον κώδικα.
Η C++ είναι μερικό υπερσύνολο της C, αλλά δεν είναι ακριβές υπερσύνολο, οπότε είναι καλή ιδέα να γράψεις τον κώδικα είτε με πρακτικές C είτε με πρακτικές C++.
Θα σου παραθέσω παραπλήσιες υλοποιήσεις και στις 2 γλώσσες, κι από εκεί και πέρα αποφάσισε εσύ ποια θα χρησιμοποιήσεις.
Αλγοριθμικά, διαβάζω το αρχείο σειριακά με ένα μόνο loop (αντί δηλαδή για 2 nested loops) το οποίο έχει για control variable το n. Αυτό σημαίνει πως πρέπει στο σώμα του loop να μετατρέψω την εκάστοτε τιμή του n στην αντίστοιχη γραμμή και στήλη του πίνακα. Το κάνω με τα macros ROW_OF(n) και COL_OF(n). Εσύ όμως αν θέλεις, μπορείς να χρησιμοποιήσεις 2 nested loops για το διάβασμα (όπως κάνεις στον κώδικα που παρέθεσες). Στη συνάρτηση που τυπώνω τα στοιχεία του πίνακα, χρησιμοποιώ κι εγώ 2 nested loops.
Δεν έχω βάλει σχόλια, αφενός γιατί για κάποιον έμπειρο δεν πολυ-χρειάζονται, και αφετέρου γιατί αν πρόκειται για εργασία τότε να αναγκαστείς να βρεις μόνη/ος σου πως ακριβώς δουλεύει, και να τα βάλεις εσύ, και άρα να μπορείς να το υποστηρίξεις σε τυχόν προφορική εξέταση (και άρα, το σημαντικότερο, να σου έχουν μείνει και 2-3 πράγματα ).
Κώδικας C++
Κώδικας:#include <iostream> #include <fstream> #include <cstdlib> #define X1FILE "anastasia.txt" #define NCOLS 3 #define NROWS 3 #define N (NROWS) * (NCOLS) #define ROW_OF(n) (n) / NCOLS #define COL_OF(n) (n) % NCOLS /*********************************************************//** * ************************************************************/ void a_print( int a[NROWS][NCOLS] ) { if ( !a ) { std::cerr << "*** a_print(): Invalid a\n"; return; } for (int i=0; i < NROWS; i++) { for (int j=0; j < NCOLS; j++) { std::cout << a[i][j]; } std::cout << std::endl; } } /*********************************************************//** * ************************************************************/ int main( void ) { int n = 0; int a[NROWS][NCOLS] = {{0,0}}; std::ifstream ifsx1(X1FILE); if ( !ifsx1.is_open() ) { std::cerr << "*** Error opening file: " << X1FILE << ", bye...\n"; exit( EXIT_FAILURE ); } for (n=0; n < N; n++) { if ( ! (ifsx1 >> a[ROW_OF(n)][COL_OF(n)]) ) break; } ifsx1.close(); if ( N != n ) { std::cout << "Only " << n << " numbers out of the expected " << N << " were found in file '" << X1FILE << "'.\n" << "The remaining " << N-n << " element(s) of the array were set to 0.\n\n" ; } a_print( a ); exit( EXIT_SUCCESS ); }
Κώδικας:#include <stdio.h> #include <stdlib.h> #define X1FILE "anastasia.txt" #define NCOLS 3 #define NROWS 3 #define N (NROWS) * (NCOLS) #define ROW_OF(n) (n) / NCOLS #define COL_OF(n) (n) % NCOLS /*********************************************************//** * ************************************************************/ void a_print( int a[NROWS][NCOLS] ) { if ( !a ) { fputs( "*** a_print(): Invalid a\n", stderr ); return; } for (int i=0; i < NROWS; i++) { for (int j=0; j < NCOLS; j++) { printf( "%d", a[i][j] ); } putchar('\n'); } } /*********************************************************//** * ************************************************************/ int main( void ) { int n = 0; int a[NROWS][NCOLS] = {{0,0}}; FILE *fpx1 = fopen(X1FILE, "r"); if ( !fpx1 ) { fprintf(stderr, "*** Error opening file: %s, bye...\n", X1FILE); exit( EXIT_FAILURE ); } for (n=0; n < N; n++) { if ( 1 != fscanf(fpx1, "%d", &a[ROW_OF(n)][COL_OF(n)]) ) break; } fclose( fpx1 ); if ( N != n ) { printf( "Only %d numbers out of the expected %d were found in file '%s'.\n" "The remaining %d element(s) of the array were set to 0.\n\n", n, N, X1FILE, N-n ); } a_print( a ); exit( EXIT_SUCCESS ); }
Επίσης, σε C++ χρήση του προ-επεξεργαστή αποθαρρύνεται, οπότε ίσως είναι καλή ιδέα να αλλάξεις τις σταθερές σε const, και τα macros σε συναρτήσεις.Τελευταία επεξεργασία από το μέλος migf1 : 07-03-14 στις 17:37.
Παρόμοια Θέματα
-
Πως μπορω να βρω ενα διαγραμμενο αρχειο?
Από sportguy στο φόρουμ WindowsΜηνύματα: 5Τελευταίο Μήνυμα: 20-11-13, 03:02 -
ένωση πολλών mp3 σε ένα αρχείο mp3 (με εντολή στο lame ίσως)
Από JULIANIK στο φόρουμ Audio, Video και ΦωτογραφίαΜηνύματα: 3Τελευταίο Μήνυμα: 12-11-13, 01:00 -
απορια με ασκηση στη c
Από vovosm7 στο φόρουμ Προγραμματισμός και γλώσσες προγραμματισμούΜηνύματα: 2Τελευταίο Μήνυμα: 06-04-13, 12:51 -
Βοήθεια σε άσκηση στη C
Από theoo στο φόρουμ Προγραμματισμός και γλώσσες προγραμματισμούΜηνύματα: 6Τελευταίο Μήνυμα: 08-03-13, 22:40
Bookmarks