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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с функцией fscanf. 
V
    Опции темы
K0SHKA
Дата 23.7.2008, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здраствуйте!

У мну вопрос. Вот допустим входящий файл содержит тока цифры.
Например:
TEXT.TXT 
Код

50 70


И есть другой файл содержащий не только цифры..
Например:
TEXT.TXT
Код

3 5
..***
.....
*....


Когда использую функцию fscanf в первом случае все нормаьно =) но во вротом случае где не только цифры, программа зависает =( 
вот пример программы.

Код

#include <stdio.h>
#include <conio.h>

void main( void )
{
    FILE *file;
    int size[2] = {1};
    file = fopen("H:\\R.txt","r");
    while(1)
    {
        if(!feof(file))
        { 
            fscanf(file,"%d",&size[0]);
            fscanf(file,"%d\n",&size[1]);
        }else
            break;
    }
    printf("A = %d\n",size[0]);
    printf("B = %d\n",size[1]);
    fclose(file);
    getch();
}

 
Помогите пожалуйста разобраться, как прочитать эти символы... И ещо как читать одновременно и цифры и символы ))
PM   Вверх
MastEdm
Дата 23.7.2008, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Master
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 3.12.2005
Где: Москва, МГИУ

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



Можно читать посимвольно, а потом проверять цифра это или нет.
PM MAIL   Вверх
EnergoHokum
Дата 23.7.2008, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

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



Так тебе прочитать их (нециферные символы) надо, или игнорировать?
PM MAIL ICQ   Вверх
K0SHKA
Дата 23.7.2008, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(MastEdm @ 23.7.2008,  09:32)
Можно читать посимвольно, а потом проверять цифра это или нет.

Покажите пример пожалуста  smile 
PM   Вверх
MastEdm
Дата 23.7.2008, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Master
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 3.12.2005
Где: Москва, МГИУ

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



Примерно так

Код

int main(void) {
    FILE* f = fopen("file", "r");
    if (f != NULL) {
        char c;
        while (fscanf(f, "%c", &c) == 1) { 
            if (isdigit(c)) {
                // Digit 
            }    
        }
        fclose(f);    
    }
    
    return 0;
}



Это сообщение отредактировал(а) MastEdm - 23.7.2008, 11:57
PM MAIL   Вверх
pycha
Дата 23.7.2008, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


главный анастазиолог
*


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

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



надо еще подключить файл ссtype
Код

#include <cctype>

--------------------
ищу хакера со знанием компьютера длятехкт
PM MAIL ICQ   Вверх
K0SHKA
Дата 23.7.2008, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



MastEdm,  Спасибо. но чтот у мну нечего невыходит.. Буду конкретней.. Как из файла со следующим содержанием
Код

3 5
..***
.....
*....


Считать и записать первые две цыфры в переменные А и B а остальные символы занести в массив  smile 


PM   Вверх
MastEdm
Дата 23.7.2008, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Master
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 3.12.2005
Где: Москва, МГИУ

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



Если я правильно понял, то числа это размеры данных: количество строк и столбцов. Тогда можно так:
Код

#include <stdio.h>

int main(void) {
    FILE* f = fopen("file", "r");
    if (f != NULL) {
        int c;
        int a, b;
        fscanf(f, "%d %d\n", &a, &b);
        char buf[a][b];
        for (int i = 0; i < a; ++i) {
            for (int j = 0; j < b; ++j) {
                c = getc(f);
                if (c == EOF) {
                    // Error.
                    return 1;
                }
                buf[i][j] = (char)c;
            }
            getc(f);
        }
        fclose(f);    
        for (int i = 0; i < a; ++i) {
            for (int j = 0; j < b; ++j) {
                printf("%c ", buf[i][j]);
            }
            printf("\n");
        }    
    }
    return 0;
}


Это сообщение отредактировал(а) MastEdm - 23.7.2008, 14:28
PM MAIL   Вверх
K0SHKA
Дата 25.7.2008, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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

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

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

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


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

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


 




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


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

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