Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> считать массив чисел (язык C) 
:(
    Опции темы
rainbowfox
Дата 7.6.2013, 04:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 7.6.2013

Репутация: нет
Всего: нет



Приветствую!возникла небольшая проблема:программа читает только первый символ файла.совершенно не понимаю почему.
Общее задание:считать из файла массив,проделать с ним операции(там сложный алгоритм со стеком),записать получившиеся результаты в второй массив и вывести его в другой файл.Если напишите ещё и заготовки для стека и вывода в файл,то я буду бесконечно благодарен.Язык:си.
Код
#include<stdio.h>
#include<stdlib.h>
 
int main()
{
    int k,i,s;
FILE *ptrfile;
k=0;
ptrfile=fopen("mass.txt","r+"); 
 
while ((fscanf(ptrfile, "%d",&s)!=EOF))
{    if(!ptrfile) break;    
        k+=1;
}
int (*c)[1]= malloc(k*sizeof(int));  
 lseek(prtfile,1,0);    
for(i=0;i<k;i++)
{                                 
    fscanf(ptrfile, "%d",&c[i][0]);  
    printf("c[%d][%d]=%d  ",i,c[i][0]);
}
fclose(ptrfile);
free(c); 
 
getchar();  
return 0;
}

PM MAIL   Вверх
rainbowfox
Дата 7.6.2013, 07:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 7.6.2013

Репутация: нет
Всего: нет



стек написан,обратите внимание что массив имеет специфический тип,он двумерный и полустатический.
PM MAIL   Вверх
feodorv
Дата 7.6.2013, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(rainbowfox @  7.6.2013,  05:44 Найти цитируемый пост)
программа читает только первый символ файла

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

Цитата(rainbowfox @  7.6.2013,  05:44 Найти цитируемый пост)
 lseek(prtfile,1,0);    

Для FILE * никак не годится lseek. Годится fseek или rewind. И почему 1?


Цитата(rainbowfox @  7.6.2013,  05:44 Найти цитируемый пост)
   if(!ptrfile) break;  

Проверку на ptrfile нужно делать сразу после fopen, а не в цикле после while ((fscanf(ptrfile,...), где уже бесполезно.


Цитата(rainbowfox @  7.6.2013,  08:20 Найти цитируемый пост)
обратите внимание что массив имеет специфический тип,он двумерный

Зачем двумерный? Это всё усложняет и приводит к ошибкам. 

Добавлено @ 08:32
Цитата(rainbowfox @  7.6.2013,  05:44 Найти цитируемый пост)
while ((fscanf(ptrfile, "%d",&s)!=EOF))

fscanf может вернуть ноль!!! Тогда вот это приведёт к неправильному "чтению" из файла:
Цитата(feodorv @  7.6.2013,  09:27 Найти цитируемый пост)
    fscanf(ptrfile, "%d",&c[i][0]);  
    printf("c[%d][%d]=%d  ",0,i,c[i][0]);


PS Ещё ошибка:
Цитата(feodorv @  7.6.2013,  09:27 Найти цитируемый пост)
   printf("c[%d][%d]=%d  ",i,c[i][0]);

В форматной строке printf три штуки %d, а значений под них передеёте всего две штуки. Для последнего %d будет напечатан мусор...


Это сообщение отредактировал(а) feodorv - 7.6.2013, 09:07


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0441 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.