

![]() |
![]() |
|
|||||||
![]() |
![]() |
| programowanie języki, projekty, pomoc, oprócz html, php, js |
|
|
|
LinkBack | Narzędzia wątku | Przeszukaj ten temat | Wygląd |
![]() |
![]() |
|
|||
|
mam rozwiazac nastepujacy problem
jest plik tekstowy np. dane.txt i w tym pliku podane sa liczby oddzielone spacjami i trzeba je wczytac do tablicy udalo mi sie napisac kod gdy w pliku sa 3 liczby(lub jakas inna znana liczba) i chodzi o to by przerobic to by dzilalo dla obojetnie jakiej ilosci liczb podanych w pliku Kod:
#include "stdafx.h"
#include "stdio.h"
#include <conio.h>
#define MAX 10
int main(void)
{
char string[MAX];
int liczby[MAX];
FILE *plik;
plik=fopen("dane.txt","r");
fgets(string,MAX,plik);
fclose(plik);
sscanf(string,"%d %d %d",&liczby[0],&liczby[1],&liczby[2]);
printf("%d %d %d\n",liczby[0],liczby[1],liczby[2]);
puts(string);
return 0;
}
|
![]() |
![]() |
![]() |
![]() |
|
|||
|
Pętla while i dopóki nie koniec pliku to wyciągasz liczby.
__________________
Mam dość ![]() Uczcie się bo Giertycha już nie ma. Chcesz pomoc? NIE DAWAJ GOTOWCÓW. |
![]() |
![]() |
![]() |
![]() |
|
|||
|
fscanf() ładuje wartości wg. typu, czyli jak masz %d to załaduje int, %s to string itp. Ale jak chcesz mieć to bardziej skomplikowane, to znów na szybko napisałem ( uwaga, teraz zamierzony przerost formy nad treścią ) coś takiego:
Kod:
#include <stdio.h>
#include <stdlib.h>
const char * c_sz_filename = "file.txt";
/** Since we don't know how many numbers a file contains it's better to
* use structure with prev-element pointer ( list ) for dynamic allocation.
*/
typedef struct _Number {
int m_value;
_Number * p_prev;
} NUMBER;
int main( int argc, char ** argv ) {
FILE * pf = fopen( c_sz_filename, "rb" );
/** Check size of file */
fseek( pf, 0, SEEK_END );
int fsize = (int)ftell( pf );
/** Set file pointer back to the beginning */
fseek( pf, 0, SEEK_SET );
/** Allocate buffer */
char * p_buffer = (char*)malloc( fsize + 1 );
/** Read file */
fread( p_buffer, 1, fsize, pf );
/** Add space at the end of the buffer */
p_buffer[ fsize ] = 0x20;
fclose( pf );
/** Parse data */
int count = 0;
int value = 0;
int sign = 1;
bool b_foundFirst = false;
NUMBER * p_lastNumber = NULL;
for ( int i = 0; i < fsize; i++ ) {
/** If there's a digit then update 'value' */
if ( p_buffer[ i ] >= '0' && p_buffer[ i ] <= '9' ) {
b_foundFirst = true;
value *= 10;
value += ( p_buffer[ i ] - '0' );
}
/** If there's '-' then switch a sign */
else if ( p_buffer[ i ] == '-' ) {
sign = -1;
}
/** If non-digit and non-dash character then add new NUMBER */
else {
if ( b_foundFirst ) {
count ++;
NUMBER * p_n = (NUMBER*)malloc( sizeof( NUMBER ) );
p_n->m_value = value * sign;
p_n->p_prev = NULL;
if ( p_lastNumber != NULL ) {
p_n->p_prev = p_lastNumber;
}
p_lastNumber = p_n;
value = 0;
sign = 1;
}
}
}
/** Now we have to turn our list into simple array */
int * array = (int*)malloc( count * sizeof(int) );
/** We know the very last element of our list so we can count it down
* until we reach the first one. */
for ( int i = count - 1; i >= 0; i-- ) {
array[ i ] = p_lastNumber->m_value;
NUMBER * tmp = p_lastNumber;
p_lastNumber = tmp->p_prev;
free( tmp );
}
/** The array is ready, we can print out all stored numbers */
for ( int i = 0; i < count; i++ ) {
printf( "Number: %d : %d \n", i, array[ i ] );
}
free( array );
return 0;
}
EDIT: nie zauważyłem, że ma być 'C' a nie C++, poprawione już ![]() Ostatnio edytowane przez jsr184 ; 03.06.2008 o 17:38. |
![]() |
![]() |
![]() |
![]() |
|
|||
|
nie nie wlasnie ja chce miec to jak najprosciej :P
poszukałem o tej funkcji fscanf() i taki kod w zupelnosci mi wystarczy: Kod:
#include <stdio.h>
#define N 50
int main()
{
int j, i=0;
int liczby[N];
FILE *plik;
if ((plik=fopen("numery.txt", "r"))==NULL)
printf("Nie moge otorzyc pliku!\n");
while (feof(plik)==0)
{
fscanf(plik, "%d", &liczby[i]);
i++;
}
if (fclose(plik))
printf("Nie moge zamknac pliku!\n");
for(j=0;j<i;j++)
printf("%d ", liczby[j]);
return 0;
}
dzieki za pomoc |
![]() |
![]() |
![]() |
![]() |
|
|||
|
Różnica między twoim a moim programem w działaniu jest taka, że nieważne czym rozdzielisz liczby, to i tak będzie czytał je dobrze, możesz użyć przecinka, kropki, nawet słowa
Ale jak napisałem, trochę przerost formy nad treścią, czasu miałem dużo ![]() |
![]() |
![]() |
|
| Narzędzia wątku | Przeszukaj ten temat |
| Wygląd | |
|
|
Podobne wątki
|
||||
| Temat | Autor wątku | Forum | Odpowiedzi | Ostatni post/autor |
| [C++] Wczytywanie liczb z pliku | szyszka007 | programowanie | 3 | 05.04.2008 19:49 |
| [C] Wczytywanie polecen i liczb | somek | programowanie | 1 | 16.01.2008 17:06 |
| C++: wczytywanie liczby do tablicy... | n3ons | programowanie | 2 | 26.12.2007 23:11 |
| [C++] Wczytywanie liczb do tablic | qwer0 | programowanie | 2 | 17.10.2007 09:35 |
| [C++] Wczytywanie liczb z klawiatury (dwa zadania) | kondzikk | programowanie | 1 | 28.11.2006 20:40 |
| Wszystkie czasy w strefie GMT +2. Teraz jest 19:34. |

