Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [С++] Ошибки кернель и нт длл библиотек


Автор: ДобренькийПапаша 30.1.2006, 14:13
Я сделал файл по адресу С:\MyName.txt, где содержится строка (без пробелов) -MyNameIlyaMyLastNameFofanov, прога должна найти слово, которое я ввожу и вывести его, если оно встречается в этом файле.
Вот исходный код:
Код

#include <iostream.h>
#include <iostream>
#include <fstream.h>
#include <string.h>
int main()
{
    const int len = 50;
    char word[len], line[len];
    cout << "Enter the word for searching: "; 
    cin >> word;

    ifstream fin("C:\\MyName.txt", ios::in | ios::nocreate);
    if(!fin) 
    {
        std::cout << "Invalid filename." << endl;
        return 1;
    }

    while (fin.getline(line, len))
    {
        if (strstr(line, word))
        {
            std::cout << "This word presented here!" << endl;
            return 0;
            getchar();
        }
    }
    std::cout << "This word absenced here!" << endl;
    return 0;
    getchar();
}

Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
The thread 0x9C has exited with code 1 (0x1).
The program 'C:\Программы для учёбы\Visual C++\MSDev98\MyProjects\Searching a substring\Debug\Searching a substring.exe' has exited with code 1 (0x1).
Эта ошибка у меня возникает в каждой проге. В большинстве случаев обходится подключением препроца <iostream> и команды getchar();
Но это уже достало, объясните в чём причина этих ошибок,пожалуйста, и как их обойти.
Связано ли это с компилятором или с ОС? Без понятия. Жду ответов.

Автор: Fixin 30.1.2006, 14:23
Ну, на кернел не ругайся. Сюдя по коду, н "1" возвращает в результате оибки открытия входноо файла. И перед выходом из проги нужно закывть поток ввода.

Автор: ДобренькийПапаша 30.1.2006, 14:56
Да не всё так просто. Напиши как правильно, в коде моём чёнить измени, я ж говорю эта ошибка во всех моих прогах возникает, она обходится, но в этот раз упрямится как коза.
Не получается ничего smile
Переписал, что функция везде нуль возвращает фсё равно не помогает.

Автор: BreakPointMAN 30.1.2006, 16:21
ДобренькийПапаша, во-первых, с какого перепуга у тебя написано такое безобразие:
Код

#include <iostream.h>
#include <iostream>
#include <fstream.h>
#include <string.h>

?
Ты, вообще, представляешь себе, что такое директива препроцессора #include, пространства имен, std?

Во-вторых, getchar'ы у тебя расположены в таких местах, что им не когда не будет передано управление: после операторов return!..

В-третьих, Fixin правильно говорит, потоки следует закрывать...

В-четвертых, а уверен ли ты, что файл "C:\\MyName.txt" действительно существует? Текстовый ли он? А достаточно ли отведено места под буфер, в которую считывается строка?

В-пятых, лучше всего проекты, исходники и exe'шники хранить в более "удобоваримых" местах - папках без длинных имен, пробелов и русских букв.

Автор: ДобренькийПапаша 30.1.2006, 16:30
Файл существует, памяти выделено достаточно, даже более чем.
Итак, спасибо, я подправил прогу, запускается, ошибка в следующем: Я сделал контрольный вывод считываемой строки из файла после while. Выяснилось, что считывается не предложение, мною написанное в файле (вот это предложение : MyNameIlyaMyLastNameFofanov), а считывается квадратик и две русские буквы. В чём проблема?
з.ы. Что значит закрой поток и как это сделать (я ж тока учусь, простите, понимаю но приблизительно)

Автор: Fixin 30.1.2006, 16:32
Цитата(BreakPointMAN @ 30.1.2006, 16:21 Найти цитируемый пост)

Ты, вообще, представляешь себе, что такое директива препроцессора #include, пространства имен, std?
Не орать! У него студия 98-я, я ее не видел, но думаю, там еще старый стандарт катируется. компилится же эта прога.

Автор: ДобренькийПапаша 30.1.2006, 17:11
Код

#include <iostream.h>
#include <iostream>
void main()
{
    const int len = 100;
    char word[len];
    char line[len]="MyNameIlyaMyLastNameFofanov";
    cout << "Enter the word for searching: "; 
    cin >> word;
    cout << word << endl;
    cout << line <<endl;

    
        if (strstr(line, word))
        {
            std::cout << "Prisutstvuet!";
        
        }
    
    
    else std::cout << "Otsutstvuet!";
    
    getchar();
}


Вот так замысел проги реализуется. Всё работает. А вот с теми потоками чёто не то. А может есть другой способ работать с входными данными из файла, посоветуйте.

Автор: Fixin 30.1.2006, 18:01
Код

#include <iostream>    
#include <fstream>    
#include <string.h>    

using namespace std;

int main()    
{    
    const int len = 50;    
    char word[len], line[len];    
    cout << "Enter the word for searching: ";    
    cin >> word;    
    ifstream fin("C:\\MyName.txt");    
    if(!fin)    
    {    
        cout << "Invalid filename." << endl;    
        return 1;    
    }        
    while (fin.getline(line, len))    
    {    
        if (strstr(line, word))    
        {    
            cout << "This word presented here!" << endl;        
            cin >> word;
            fin.close();
            return 0;             
        }    
    }
    fin.close();
    cout << "This word absenced here!" << endl;        
    cin >> word;    
    return 0;    
}
У меня все работает. ТОлько студия у маня нетовская, потому код отличается

Автор: BreakPointMAN 30.1.2006, 18:06
Fixin, а кто здесь орет? Или ты, может быть, считаешь, что следующий код является образцом для подражания?
Код

#include <iostream.h>
#include <iostream>

Автор: ДобренькийПапаша 30.1.2006, 18:27
БрейкПоинт: Слухай, объясни мне, плиз, почему так нельзя делать? Желательно по-подробней, если не занят.

Автор: Fixin 30.1.2006, 18:41
Цитата(ДобренькийПапаша @ 30.1.2006, 18:27 Найти цитируемый пост)

БрейкПоинт: Слухай, объясни мне, плиз, почему так нельзя делать? Желательно по-подробней, если не занят.

ну, я лично не знаю. у меня просто студия такого не допукает, и я и не пишу так smile

Автор: ДобренькийПапаша 30.1.2006, 19:41
А какую студию лучше всего поставить?

Автор: Fixin 30.1.2006, 19:58
по потребностям smile если определенных потребностей нет, ставь самую модерновую, какую найдешь. первое время - сложно пивыкать будешь.

Цитата(Правила раздела)

Помни: один топик - один вопрос!

Не оффтопить!

Автор: Exception 30.1.2006, 20:28

 ! 
Exception
Давайте не будем переходить на личности.
По сабжу: в том, что он что-то пишет про kernel32.dll, нет ошибки. Он пишет, что не найдены отладочные файлы для них, это так и должно быть smile .

Автор: Fixin 30.1.2006, 20:31
Цитата(Exception @ 30.1.2006, 20:28 Найти цитируемый пост)

Он пишет, что не найдены отладочные файлы для них
Ты откуда это взял?


Автор: ДобренькийПапаша 31.1.2006, 10:18
To Exception: Понимаешь, такого у меня раньше не было, было, но редко. А теперь, с недавнего времени, он выдаёт мне эти ошибки в каждой проге. Даже если "Хеллоу Ворлд", я проверял.
Что же мне теперь делать? Мне надоело пользоваться функцией getchar() и std::, а без них проги не пашут.

Автор: BreakPointMAN 31.1.2006, 13:04
Цитата(ДобренькийПапаша @ 31.1.2006, 10:18 Найти цитируемый пост)

Мне надоело пользоваться функцией getchar() и std::, а без них проги не пашут.

Говорю еще раз, почитай про пространства имен...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)