Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
вандал
126 / 126 / 1
Регистрация: 20.11.2009
Сообщений: 498
#1

Возникает ошибка при использовании fscanf - C++

08.06.2010, 22:33. Просмотров 715. Ответов 5
Метки нет (Все метки)

Здраствуйте. Возникла такая проблема что при попытке что-то сделать с временной строкой 'с' выдается виндовская ошибка что пямать не может быть read. даже вывести ее после сканфа не получается. помогите пожалуйста разобраться.запускается следующим образом сначала пишите исполняемый фаил затем затем фаил с которым работаете. например "\lab file.txt"


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include "stdio.h"
#include <iostream>
#include <vector>
#include <map>
#include <ctime>
#include <cstdlib>
using namespace std;
int main(int argc, char **argv) {
    FILE *fi; 
    vector<int> vt;
    map<string, vector<int> > sht;
    char b[32];
    int i = 0, instr = 1, l = 0;
    string word, c, word2;
    if(argc < 2) {
        printf("error: no input file specified\n"
            "usage: %s filename\n", argv[0]);
        goto done;
    }
    if(!(fi = fopen(argv[1], "r"))) {
        printf("error: can't open file %s\n", argv[1]);
        goto done;
    }
      clock_t timer;
        cout << "enter search word: " << endl;
    cin >> word;
    cout << "looking for word " << word << "..." << endl;
    timer = clock();
    cout << "test4" << endl;   
    c = "d";
    printf("%s", c);
    while(fscanf(fi, "%s", &c) != EOF){   
       cout << "test5" << endl;
       l = c.length();
       if((c[l-1] == ',')||(c[l-1] == '.')||(c[l-1] == '!')||(c[l-1] == '?')){
          word2.replace(0,l-1,c);
          cout << "test" << endl;
          if(word2 == sht.find(word2)->first){
             (sht.find(word2)->second).push_back(instr);
          cout << "test1"<< endl;
          }
          else{
             l = vt.size();
             for(int k; k < l; k++){
                vt.pop_back();
             }
             vt.push_back(instr);
             sht.insert(std::pair<string,vector<int> >(b,vt));
          cout << "test2"<< endl;
          } 
       }
       if(c[l-1] == '\n')
          instr++;
    }       
        cout << "test3"<< endl;
        for(int k=0;k < (sht.find(word)->second).size();k++){
               cout << "stroka # " << (sht.find(word)->second)[k] << endl;
        }
     
      cout << "std::map took " << static_cast<double>(clock() - timer)/CLOCKS_PER_SEC << " second\n";
 
done:
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2010, 22:33     Возникает ошибка при использовании fscanf
Посмотрите здесь:

C++ При попытке чтения ini файла возникает ошибка
Ошибка при использовании STL C++
C++ При обработке функции возникает ошибка
Ошибка при использовании вектора C++
C++ Возникает ошибка при удалении динамического массива символов в деструкторе класса
C++ При вызове деструктора возникает ошибка Debug Assertion Failed!
C++ возникает ошибка при использовании массива, как параметр функции
C++ Возникает неизвестная ошибка при попытке скомпилировать программу
C++ Возникает ошибка в программе при вводе нуля
при отладке программы возникает ошибка C++
Двумерный массив символов: при высвобождении памяти возникает ошибка C++
При разыменовании содержимого контейнера vector<string*> возникает ошибка C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
 Аватар для kazak
3030 / 2351 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
08.06.2010, 22:40     Возникает ошибка при использовании fscanf #2
fscanf со string'ами не работает)))
вандал
126 / 126 / 1
Регистрация: 20.11.2009
Сообщений: 498
08.06.2010, 23:19  [ТС]     Возникает ошибка при использовании fscanf #3
спасибо сейчас тогда че-нить придумаю
][акер
#define книжный_червь Я
 Аватар для ][акер
182 / 93 / 6
Регистрация: 30.01.2010
Сообщений: 780
08.06.2010, 23:22     Возникает ошибка при использовании fscanf #4
Сделай так:
C++
1
Переменная_типа_string.c_str()
c_str преобразует string в си-строку.
kazak
 Аватар для kazak
3030 / 2351 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
08.06.2010, 23:26     Возникает ошибка при использовании fscanf #5
Для записи в string это не пойдет.
вандал
126 / 126 / 1
Регистрация: 20.11.2009
Сообщений: 498
09.06.2010, 17:19  [ТС]     Возникает ошибка при использовании fscanf #6
даже если ввожу посимвольное считывание все равно если ставлю до конца EOF то вообще в цикл не входит а если ставлю например до какого-нить символа то цикл не останавливается и возникает виндовская ошибка память не может быть read.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <iostream>
#include <vector>
#include <map>
#include <ctime>
#include <cstdlib>
using namespace std;
int main(int argc, char **argv) {
    FILE *fi; 
    vector<int> vt;
    map<string, vector<int> > sht;
    char b[32], ch;
    int i = 0, instr = 1, l = 0;
    string word, c, word2;
    if(argc < 2) {
        printf("error: no input file specified\n"
            "usage: %s filename\n", argv[0]);
        goto done;
    }
    if(!(fi = fopen(argv[1], "r"))) {
        printf("error: can't open file %s\n", argv[1]);
        goto done;
    }
      clock_t timer;
        cout << "enter search word: " << endl;
    cin >> word;
    cout << "looking for word " << word << "..." << endl;
    timer = clock();     
    while ((ch = fgetc(fi)) != EOF){   
       if ((ch != ' ')||(ch != '\n')){
             c[i] = ch;
             i++;
       //cout << "test5" << endl;
       }
       else{
          cout << "test6" << endl;
          l = c.length();
          cout << l;
         if((c[l-1] == ',')||(c[l-1] == '.')||(c[l-1] == '!')||(c[l-1] == '?')){
             word2.replace(0,l-1,c);
             cout << word2 << endl;
             if(word2 == sht.find(word2)->first){
                vector<int>& vtt = sht.find(word2)->second;
                vtt.push_back(instr);
             cout << "test1"<< endl;
             }
             else{
                while(!vt.empty()) vt.pop_back();
                vt.push_back(instr);
                sht.insert(std::pair<string,vector<int> >(c,vt));
                cout << "test2"<< endl;
             } 
          }
          if(c[l-1] == '\n')
             instr++;
       i = 0;
       }
    }
    for( map<string, vector<int> >::iterator it = sht.begin(); it != sht.end(); ++it ){
       cout << it->first << "n";
    }
 
      cout << "std::map took " << static_cast<double>(clock() - timer)/CLOCKS_PER_SEC << " second\n";
 
done:
    return 0;
}
Добавлено через 5 часов 11 минут
всем спасибо ошибка возникала из-за того что был поврежден фаил с которого читал)
Yandex
Объявления
09.06.2010, 17:19     Возникает ошибка при использовании fscanf
Ответ Создать тему
Опции темы

Текущее время: 13:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru