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

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

Восстановить пароль Регистрация
 
вандал
126 / 126 / 1
Регистрация: 20.11.2009
Сообщений: 498
08.06.2010, 22:33     Возникает ошибка при использовании fscanf #1
Здраствуйте. Возникла такая проблема что при попытке что-то сделать с временной строкой 'с' выдается виндовская ошибка что пямать не может быть 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
 Аватар для kazak
3029 / 2350 / 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
3029 / 2350 / 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
Ответ Создать тему
Опции темы

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