Помогите найти ошибку

Тема в разделе "MS Visual C++", создана пользователем -, 15 янв 2009.

  1. Гость

    Помогите пожалуйста найти ошибку в моей программе.Это универсальная программа тестирования.Вроде все должно работать но почему-то не работает.Вот код программы:[codebox]//универсальная программа тестирования
    #include "stdio.h"
    #include "conio.h"
    #include "string.h"

    void main (int arg,char*argv[])
    {
    char fname[40]; //имя файла текста
    FILE*f; //файл текста

    int VsegoVopr=0; //количество вопросов теста
    int PravOtv=0; //кол-во правх отв.

    //для текущего вопроса
    int nOtv; //кол-во альтернативных ответов
    int Prav; //номер правильного ответа
    int Otv; //номер отв выбранного пользователем

    int p;

    char st[80]; //строка файла теста

    int i; //счетчик циклов

    //- if (!argc)
    {
    puts("\nNe zadan fail voprosov testa");
    puts("komandnaia stroka: test Imafaila testa\n");
    return;
    }
    strcpy(fname,argv[1]); //имя файла из командной строки
    //Открыть файл в режиме чтения® текста (t)
    if ((f=fopen(fname,"rt"))==NULL)
    {
    printf("Owibka otkritia faila %s",fname);
    getch();
    return;
    }

    //- clrscr();
    puts("\nSe4as vam budet predlojen.");
    puts("K kajdomu voprosu daetsia neskoliko \
    variantov otveta.");
    puts("Vi doljni vvesti nomer pravilinogo otveta.");
    puts("i najati klavishu <Enter>\n");


    printf("dlia na4ala testirovaniia najmite klavishu <Enter>");
    getch();
    //- textbackground(BLUE);
    //- clrscr();


    while (!feof(f))
    {
    VsegoVopr++;
    fgets(st,80,f); //читаем из файла вопрос
    printf("\n%s\n",st); //вопрос на экран


    fscanf(f,"%i %i",&nOtv,Prav); //кол-во вариантов ответа
    //и номер правильного ответа
    fgets(st,80,f); //дочитать конец предыдущей строки

    //читаем и выводим альтернативные ответы
    for (i=1;i<=nOtv;i++)
    {
    fgets(st,80,f);
    printf("%i. %s",i ,st);
    }
    printf("\nVash vibor->");
    scanf("%i",&Otv);
    if (Otv == Prav)
    PravOtv ++;
    }

    //обработка рез-та тестирования
    //вычислим процент правильных ответов
    p = 100*PravOtv/VsegoVopr;
    printf("\nVasha ocenka - ");
    if (p==100)
    puts("Krasav4ik!!!");
    if (p>=80 && p<=99)
    puts("Tak sebe!!");
    if (p>=60 && p<=79)
    puts("Slaba4ok!");
    if (p<60)
    puts("LUZER!!!\n");


    puts("\nDlia zaversheniia najmite klavishu <Enter>");
    getch();
    }


    [/codebox]

    Вот она же но немного подредактирована.Все равно не выходит.
    Код (Text):
    //универсальная программа тестирования
    #include "stdio.h"
    #include "conio.h"
    #include "string.h"
    #include "iostream.h"


    void main (int argc,char*argv[])
    {
    char qqq[40];  //имя файла текста
    FILE*f;       //файл текста

    int VsegoVopr=0; //количество вопросов теста
    int PravOtv=0;  //кол-во правельных отв.

    //для текущего вопроса
    int nOtv;        //кол-во альтернативных ответов
    int Prav;        //номер правильного ответа
    int Otv;            //номер отв. выбранного пользователем

    int p;

    char st[80];      //строка файла теста

    int i;              //счетчик циклов

    if (!argc)
    {
    puts("\nNe zadan fail voprosov testa");
    puts("komandnaia stroka: test Imafaila testa\n");
    return;
    }
    strcpy(qqq,argv[1]);    //имя файла из командной строки
    //Открыть файл в режиме чтения(r) текста (t)
    if ((f=fopen("qqq","rt"))==NULL)
    {
    printf("Owibka otkritia faila %s",qqq);
    getch();
    return;
    }

    puts("\nSe4as vam budet predlojen.");
    puts("K kajdomu voprosu daetsia neskoliko \
    variantov otveta.");
    puts("Vi doljni vvesti nomer pravilinogo otveta.");
    puts("i najati klavishu <Enter>\n");


    printf("dlia na4ala testirovaniia najmite klavishu <Enter>");
    getch();


    while (!feof(f))
    {
    VsegoVopr++;
    fgets(st,80,f);             //читаем из файла вопрос
    printf("\n%s\n",st);        //вопрос на экран


    fscanf(f,"%i %i",&nOtv,Prav);       //кол-во вариантов ответа
    //и номер правильного ответа
    fgets(st,80,f);             //дочитать конец предыдущей строки

    //читаем и выводим альтернативные ответы
    for (i=1;i<=nOtv;i++)
    {
    fgets(st,80,f);
    printf("%i. %s",i ,st);
    }
    printf("\nVash vibor->");
    scanf("%i",&Otv);
    if (Otv == Prav)
    PravOtv ++;
    }

    //обработка рез-та тестирования
    //вычислим процент правильных ответов
    p = 100*PravOtv/VsegoVopr;
    printf("\nVasha ocenka - ");
    if (p==100)
    puts("Otli4no!!!");
    if (p>=80 && p<=99)
    puts("horowo!!");
    if (p>=60 && p<=79)
    puts("Udovletvoritelino!");
    if (p<60)
    puts("PLOHO!!!\n");


    puts("\nDlia zaversheniia najmite klavishu <Enter>");
    getch();
    }
     
  2. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Описывайте, что конкретно не работает. Иначе поиск ошибки слишком трудоемок
     
  3. Гость

    При компилировании выдает ошибку:Ошибка приложения,мол память не может быть read и т.д.Думал что она не находит текстовый файл но вроде он есть( файл qqq находится в той же директории что и exe-шник)и все должно работать.Вот ее же код но еще немного отредактированный:
    Код (Text):
    //универсальная программа тестирования
    #include "stdio.h"
    #include "conio.h"
    #include "string.h"
    #include "iostream.h"


    void main (int argc,char*argv[])
    {
    char qqq[40];  //имя файла текста
    FILE*f;       //файл текста

    int VsegoVopr=0; //количество вопросов теста
    int PravOtv=0;  //кол-во правельных отв.

    //для текущего вопроса
    int nOtv;        //кол-во альтернативных ответов
    int Prav;        //номер правильного ответа
    int Otv;            //номер отв. выбранного пользователем

    int p;

    char st[80];      //строка файла теста

    int i;              //счетчик циклов

    if (!argc)
    {
    puts("\nNe zadan fail voprosov testa");
    puts("komandnaia stroka: test Imafaila testa\n");
    return;
    }
    strcpy(qqq,argv[1]);    //имя файла из командной строки
    //Открыть файл в режиме чтения(r) текста (t)
    if ((f=fopen(qqq,"r+"))==NULL)
    {
    printf("Owibka otkritia faila %s",qqq);
    getch();
    return;
    }

    puts("\nSe4as vam budet predlojen.");
    puts("K kajdomu voprosu daetsia neskoliko \
    variantov otveta.");
    puts("Vi doljni vvesti nomer pravilinogo otveta.");
    puts("i najati klavishu <Enter>\n");


    printf("dlia na4ala testirovaniia najmite klavishu <Enter>");
    getch();


    while (!feof(f))
    {
    VsegoVopr++;
    fgets(st,80,f);             //читаем из файла вопрос
    printf("\n%s\n",st);        //вопрос на экран


    fscanf(f,"%i %i",&nOtv,&Prav);      //кол-во вариантов ответа
    //и номер правильного ответа
    fgets(st,80,f);             //дочитать конец предыдущей строки

    //читаем и выводим альтернативные ответы
    for (i=1;i<=nOtv;i++)
    {
    fgets(st,80,f);
    printf("%i. %s",i ,st);
    }
    printf("\nVash vibor->");
    scanf("%i",&Otv);
    if (Otv == Prav)
    PravOtv ++;
    }

    //обработка рез-та тестирования
    //вычислим процент правильных ответов
    p = 100*PravOtv/VsegoVopr;
    printf("\nVasha ocenka - ");
    if (p==100)
    puts("Otli4no!!!");
    if (p>=80 && p<=99)
    puts("horowo!!");
    if (p>=60 && p<=79)
    puts("Udovletvoritelino!");
    if (p<60)
    puts("PLOHO!!!\n");


    puts("\nDlia zaversheniia najmite klavishu <Enter>");
    getch();
    }
     
  4. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    1 - Запускаете отладку и находите в какой строке ошибка.
    2 - Долго думаете почему так произошло.
    3 - Если поняли, мои поздравления.
    4 - Если не поняли, показываете где ошибка и почему, на ваш взгляд, она произошла

    P.S. Вероятнее всего, вы читаете из файла больше чем в нем есть. Проверяйте результат каждого вызова fgets на NULL
     
  5. Гость

    Я очистил функцию main и убрал условие:
    Код (Text):
        if (!argc)
    {
    puts("\nNe zadan fail voprosov testa");
    puts("komandnaia stroka: test Imafaila testa\n");
    return;
    }
    strcpy(qqq,argv[1]);    //имя файла из командной строки
    Не понял почему,но программа работает.Теперь осталось сделать интерфейс.Мне посоветовали перегнать ее в билдер,мол там легче.Но по моему так будет сложнее.Вопрос:Можно код из С++ переделать под билдер?
     
Загрузка...
Похожие Темы - Помогите найти ошибку
  1. OlgaZag
    Ответов:
    1
    Просмотров:
    1.292
  2. OlgaZag
    Ответов:
    0
    Просмотров:
    524
  3. Google313
    Ответов:
    0
    Просмотров:
    1.001
  4. Marikd
    Ответов:
    2
    Просмотров:
    1.210
  5. ruivit
    Ответов:
    2
    Просмотров:
    1.329

Поделиться этой страницей