2017-01-29 11 views
-3

У меня есть 32 бита в виде текстового файла в Sender.txt какКак хранить числовую строку в файле в виде отдельного целого числа в массиве в C

00100100101110001111111100000001 

Я хочу сохранить каждый индивидуальный номер в виде не целое число в массиве. Я пробовал следующий код, но не работал.

#include <stdio.h> 
#include<stdlib.h> 

void main() 
{ 
    FILE *myfile; 
    myfile = fopen("Sender.txt" , "r"); 
    char data[32]; 
    int i,con, data1[32]; 

    for(i=0;i<32;i++) 
    { 
    fscanf(myfile, "%1s", &data[i]); 
    } 

    for(i=0;i<32;i++) 
    { 
    con = atoi(data[i]); 
    data1[i]=con; 
    } 

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

'Е ("% d \ N", & data1 [I]);' -> 'Е ("% d \ n ", data1 [i]);' –

+0

Ваша первая проблема: 'atoi (data [i])' преобразует всю строку из символа 'i' в конец. Вторая проблема: эта строка либо не заканчивается NULL, либо расширяется за пределы границы массива. Ваша третья проблема: вы назначаете целочисленное число символу. Все три проблемы находятся в одном цикле, и в других случаях может быть больше проблем. Но, во-первых, ваш вопрос не совсем понятен. – DyZ

ответ

1

Тем не менее, без полного понимания цели вашей деятельности, я предлагаю переписать первые две петли:

for(i = 0; i < 32; i++) 
{ 
    int next = fgetc(myfile); 
    data1[i] = (next == '0') : 0 ? 1; 
} 

Этот код предполагает, что файл имеет 32 1 или 0, все в одной строке, и ничего больше.

Это может быть дополнительно сжаты, возможно, за счет ясности:

for(i = 0; i < 32; i++) 
{ 
    data1[i] = fgetc(myfile) - '0'; 
} 
-1

Почему бы вам не использовать fgetc? Эта функция считывает только один Charakter и возвращает его. Ваш код должен выглядеть следующим образом:
Это один получил ошибки см EDIT

FILE *file; 
char c[32]; 
for(int i = 0; i < 32; i++){ 
    if((c[i] = fgetc(file)) == NULL) 
     //then Error 
} 
fclose(file); 

EDIT: Как справедливо отмечает «алк» (то, что имя помощника XD) Условный пункт не имеет смысла вообще. Раньше я извиняюсь. Правильный код должен конечно выглядеть следующим образом:

FILE *file; 
int data[32]; //The Question was to store the Data in an int not char like i did... 
for(int i = 0; i < 32; i++)  
    data[i] = fgetc(file) - '0'; 
fclose(file); 

С наилучшими пожеланиями

+0

есть нечто большее, чем кажется на первый взгляд. –

+0

'fgetc()' возвращает 'int'. При ошибке возвращается 'EOF'. Более того, он не возвращает указатель, поэтому сравнение с «NULL» (литерал с нулевым указателем) не имеет смысла. – alk

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

  • Нет связанных вопросов^_^