2013-09-16 3 views
1

Как я могу прочитать содержимое текстового файла и поместить его в массив? Например, у меня есть 3, 2, 1, 0 в текстовом файле, и я хочу прочитать файл и сохранить значения в массиве. Я использую функцию fscanf сделать это:Чтение входного файла в массив

int a[4]; 
point = fopen("test.txt", "r"); 

for(int i = 0; i < 4; i++) 
{ 
    fscanf(point , "%d " , &a[i]);    
} 

// printing put the values ,but i dont get the text file values 

for(int i = 0; i < 4; i++) 
{ 
    printf("%d\n" , a[i]); 
} 

я запустил эту программу, но я не получил значения присутствуют в текстовом файле. Может ли кто-нибудь предложить способ сделать это? Я хочу специально решить его с помощью функции fscan.

+1

Что вы получаете? – DanielY

+0

Что у вас получилось? Ваш файл содержал пробел после каждого значения? Вы также должны добавить проверку того, что 'fopen()' и 'fscanf()' работают. –

+3

Почему [тег: C++] тег? – LihO

ответ

2

вы можете найти ответ на свой вопрос here:

#include <stdio.h> 
int main() 
{ 
    FILE* f = fopen("test.txt", "r"); 
    int n = 0, i = 0; 
    int numbers[5]; // assuming there are only 5 numbers in the file 

    while(fscanf(f, "%d,", &n) > 0) // parse %d followed by ',' 
    { 
     numbers[i++] = n; 
    } 

    fclose(f); 
} 
0
#include <stdio.h> 
#include <stdlib.h> 

void main() { 
    int a[4]; 
    FILE* point = fopen("test.txt", "r"); 

    if (NULL == point) { 
     perror("File not found!"); 
     exit(-1); 
    } 

    for (int i = 0; fscanf(point, "%d%*c", &a[i]) > 0 && i < 4; i++) { 
     printf("%d\n", a[i]); 
    } 

    fclose(point); 
} 

test.txt:

11234, 2234, 32345, 42542 
+0

Эта программа просто печатает первое значение в текстовом файле - 3. Это не печатает другие значения, присутствующие в файле txt. Любое решение? –

+0

@Rdvsm мой код работает. Посмотрите на это. – Megharaj

+0

err ... как вы запустили программу? У меня есть текстовый файл здесь с 4 номерами, и эта программа все еще печатает все 4 номера – smac89

0

Всегда убедитесь, что вы читаете из значения. Если вы читаете символы из файла в порядке. Но если вы хотите читать целые числа, всегда проверяйте их как символы и конвертируйте их в целые числа.

#include<stdio.h> 
int main() 
{ 
    char a; 
    FILE *point; 
    int i, b[4]; 
    point = fopen("test.txt", "r"); 
    for(i = 0; i < 4; i++) { 
      a = fgetc(point); 
     b[i] = atoi(&a);    
    } 
// printing put the values ,but i dont get the text file values 
    for(i = 0; i < 4; i++) 
     printf("%d\n" , b[i]); 
} 

это мой текстовый файл,

3210 

это мой выход,

3 
2 
1 
0 
1

fscanf, если используется для чтения данных из потока и хранить их в соответствии с форматом параметра в в указанных местах. Вы можете получить ссылку here.

Поэтому вы должны проверить формат значений в файле, для вашего примера у вас есть «3,2,1,0» в файле, вы должны установить формат «% d», потому что каждое значение было последовали за «,».

#include <stdio.h> 

int main() 
{ 
    int a[4], i; 
    FILE *point = fopen("test.txt", "r"); 

    for(i = 0; i < 4; i++) 
    { 
     fscanf(point , "%d," , &a[i]); 
    } 

    // printing put the values ,but i dont get the text file values 

    for(i = 0; i < 4; i++) 
    { 
     printf("%d\n" , a[i]); 
    } 
} 

я проверить его с моим CodeBlocks на окнах, я получаю

3 
2 
1 
0 
+0

oops !! он работает отлично !!! это была проблема с пространством между% d и "," –

0

Сначала вы должны знать порядок, в котором числа записываются в текстовый файл, если они отделены друг от друга одним пробелом , вы можете использовать такой код:

for(int i=0; i<4; i++) 
{ 
fscanf(point, "%d ", &a[i]); 
} 

вы должны оставить пробел после %d. Если числа записываются в отдельных строках, вы можете использовать такой код:

for(int i=0; i<4; i++) 
{ 
fscanf(point, "%d\n", &a[i]); 
} 

Это все, вы можете распечатать эти значения по вашему желанию.

Смежные вопросы