跳到內容
  • 版面
  • 最新
  • 標籤
  • 熱門
  • 使用者
  • 群組
  • 搜尋
  • Get Qt Extensions
  • Unsolved
Collapse
品牌標誌
  1. 首頁
  2. Qt Development
  3. General and Desktop
  4. [Solved]Program exited with code 0
Forum Updated to NodeBB v4.3 + New Features

[Solved]Program exited with code 0

已排程 已置頂 已鎖定 已移動 General and Desktop
49 貼文 3 Posters 31.2k 瀏覽 1 Watching
  • 從舊到新
  • 從新到舊
  • 最多點贊
回覆
  • 在新貼文中回覆
登入後回覆
此主題已被刪除。只有擁有主題管理權限的使用者可以查看。
  • G 離線
    G 離線
    gayu
    寫於 最後由 編輯
    #1

    Hi,
    I am new to Qt. I am using Qtcreator version 4.6.2, in linux.
    The main theme of my project is to prepare a question bank.
    In that, through the editor i am entering the various options (i.e fill,choose,match,short ques,and long ques).
    While entering through editor, the .xml file first generate and from that xml file it will enter the database.
    In that the i’m having problem in entering short ques and long ques into the database.
    While entering the Question and Answer,it generates the xml file bt nt enter to the database, and get exit from the editor showing the following.

    @
    ASSERT: “i >= 0” in file /usr/include/qt4/QtCore/qstring.h, line 875
    The program has unexpectedly finished.
    /home/tts/Desktop/QbankEditorAllrequirement/qbank exited with code 0
    @
    please help me to solve this.

    1 條回覆 最後回覆
    0
    • L 離線
      L 離線
      lgeyer
      寫於 最後由 編輯
      #2

      Your index to operator[] is invalid (< 0).

      1 條回覆 最後回覆
      0
      • G 離線
        G 離線
        gayu
        寫於 最後由 編輯
        #3

        sorry to ask might be a silly Question.
        What "index to operator[] is invalid (< 0)" this mean

        1 條回覆 最後回覆
        0
        • A 離線
          A 離線
          AlekseyOk
          寫於 最後由 編輯
          #4

          This means that you are trying to make something like this:

          @
          QVector<int> vec;
          vec[-1] = 0;
          @

          1 條回覆 最後回覆
          0
          • G 離線
            G 離線
            gayu
            寫於 最後由 編輯
            #5

            ya, in my code it is returning the index value "index=-1". so it is exiting.
            It should not return the "-1". I am trying to solve, bt i dont know how to solve this. please help me

            1 條回覆 最後回覆
            0
            • A 離線
              A 離線
              AlekseyOk
              寫於 最後由 編輯
              #6
              1. Find error in your code
                or/and
              2. Check for correctness your index @(index >= 0 && index < vec.size())@ before operator[]

              if (index == -1) is an exit condition - just exit from your app :-))

              1 條回覆 最後回覆
              0
              • G 離線
                G 離線
                gayu
                寫於 最後由 編輯
                #7

                The index is initialized to '0'.
                Some formats are there to enter the Question and Answers in Database, through editor.
                While the Question is entered the parseQuestion function is called.
                While the Answer is entered the parseOption function is called.
                In the parseOption function, the condition is checked. The function includes the index,option,stmt,phrase .
                The phrase is the one entered within the '| ' (eg |Lotus\ is our national flower) In this eg to highlight "Lotus" we are using the '| ' symbol.
                In the above eg Lotus is the phrase, if any stmt seen before the phrase is considered as stmt1,and after the phrase is the stmt2.

                I give another eg.

                If i am entering a Ques and Ans like this

                What is Qt?
                Qt is a |cross platform application framework
                Qt is a is the stmt1
                *|cross platform application framework* is the phrase

                While running with above eg my code runs fine and every thing enters into the database.

                But when i am entering like this

                What is Qt?
                Qt is a |cross platform application framework\ .
                Qt is a is the stmt1
                *|cross platform application framework* is the phrase
                .. is considered as the stmt2 and returns the index value as '-1' since there is no '|'
                The following is the condition it checks for the stmt2, and no '|' is seen so returning '-1'

                until for stmt1 amd the phrase it reads the index value as +ve value only.
                bt when reading the stmt2 it is returning '-1'.

                @
                while(option[index] != '|')
                {
                stmt1[j] = option[index];
                cout<<"stmt1[j]\n"<<stmt1<<endl;
                if(option[index]=='\0')
                {
                stmt1[j] = '\0';
                option[0] = '\0';
                return -1; //here it returns '-1'
                }
                index++;
                j++;
                }
                @

                1 條回覆 最後回覆
                0
                • A 離線
                  A 離線
                  AlekseyOk
                  寫於 最後由 編輯
                  #8

                  You should check for '|' and NOT '\0'.

                  E.g.:

                  @
                  while(option[index] != '|' &&
                  option[index] != '\0')
                  @

                  1 條回覆 最後回覆
                  0
                  • G 離線
                    G 離線
                    gayu
                    寫於 最後由 編輯
                    #9

                    I used some cout stmts to check wat the option of index is.
                    The option[index] is printing as the "|" symbol.
                    After the stmt1 the "|" is seen and return the option[index] as "|" and returning the index value as +ve value.
                    Then when coming to the stmt2 it checks the condition, "|" . The condition is not get satisfied returning "-1".

                    And I also tried wat u said,
                    @
                    1.
                    while(option[index] != '|' &&
                    2.
                    option[index] != '\0')
                    @
                    It is not taking the phrase value,only it reads the stmt1, and exit from the editor.

                    1 條回覆 最後回覆
                    0
                    • A 離線
                      A 離線
                      AlekseyOk
                      寫於 最後由 編輯
                      #10

                      try to add you check

                      @
                      if(option[index]=='\0')
                      {
                      stmt1[j] = '\0';
                      option[0] = '\0';
                      return -1; //here it returns '-1'
                      }
                      @

                      after the loop if you want to exit with code -1.

                      Why are you using this loop instead of "QString::indexOf":http://qt-project.org/doc/qt-4.8/qstring.html#indexOf

                      1 條回覆 最後回覆
                      0
                      • G 離線
                        G 離線
                        gayu
                        寫於 最後由 編輯
                        #11

                        Ya i checked by adding the "if" after the loop.
                        But it doesn't exit from the loop, runs until i stop the execution.

                        1 條回覆 最後回覆
                        0
                        • A 離線
                          A 離線
                          AlekseyOk
                          寫於 最後由 編輯
                          #12
                          1. Is option a QString?
                          2. Is option ends with '\0'?

                          If 1 and 2 are true than this loop shouldn't be infinite.

                          1 條回覆 最後回覆
                          0
                          • G 離線
                            G 離線
                            gayu
                            寫於 最後由 編輯
                            #13

                            ya the option is QString only.
                            You asked me to check the "if" by adding it after the loop. By adding it after the loop only becomes infinite.

                            1 條回覆 最後回覆
                            0
                            • A 離線
                              A 離線
                              AlekseyOk
                              寫於 最後由 編輯
                              #14

                              Should this help?

                              @
                              int pos1 = option.indexOf('|');
                              if (pos1 != -1)
                              {
                              stmt1 = option.left(pos1);

                              int pos2 = option.indexOf('\\', pos1);
                              if (pos2 != -1)
                              {
                                  phrase = option.mid(pos1, pos2 - pos1);
                              }
                              

                              else
                              {
                              // there is no '|' symbol in option
                              }
                              @

                              1 條回覆 最後回覆
                              0
                              • G 離線
                                G 離線
                                gayu
                                寫於 最後由 編輯
                                #15

                                Ya i tried tis by replacing tat, bt it is still the same not exiting from the loop, also printing the stmt as null.

                                1 條回覆 最後回覆
                                0
                                • A 離線
                                  A 離線
                                  AlekseyOk
                                  寫於 最後由 編輯
                                  #16

                                  You shouldn't use a single backslash in option string, because it will be processed as '.' in second case.
                                  So, before processing, replace single backslashes with doubled or select another symbol

                                  1 條回覆 最後回覆
                                  0
                                  • G 離線
                                    G 離線
                                    gayu
                                    寫於 最後由 編輯
                                    #17

                                    This means whether you are asking me to use double backslash in the phrase itself or at the end of last stmt i've to put double backslash.

                                    1 條回覆 最後回覆
                                    0
                                    • G 離線
                                      G 離線
                                      gayu
                                      寫於 最後由 編輯
                                      #18

                                      By trying with this code,

                                      @
                                      1.int pos1 = option.indexOf('|');
                                      2.if (pos1 != -1)
                                      3. {
                                      4. stmt1 = option.left(pos1);
                                      5. int pos2 = option.indexOf('\', pos1);
                                      7. if (pos2 != -1)
                                      8. {
                                      9. phrase = option.mid(pos1, pos2 - pos1);
                                      10 }
                                      11. else
                                      12. {
                                      13. // there is no '|' symbol in option
                                      14. }
                                      @
                                      I am getting this error "commitdb.cpp:1219: error: a function-definition is not allowed here before ‘{’ token" in some other functions.
                                      so i removed this code and compile with the the original code itself.@@

                                      1 條回覆 最後回覆
                                      0
                                      • A 離線
                                        A 離線
                                        AlekseyOk
                                        寫於 最後由 編輯
                                        #19

                                        add } before else

                                        1 條回覆 最後回覆
                                        0
                                        • G 離線
                                          G 離線
                                          gayu
                                          寫於 最後由 編輯
                                          #20

                                          Ya i added }
                                          Now it is not exiting from the editor and its working.
                                          But, the question is entering into database finely, the answer is not entering to the database (i.e options) printing the null values for option,stmt1 and stmt2 . Also the null values are entering to database more than once

                                          1 條回覆 最後回覆
                                          0

                                          • 登入

                                          • Login or register to search.
                                          • 第一個貼文
                                            最後的貼文
                                          0
                                          • 版面
                                          • 最新
                                          • 標籤
                                          • 熱門
                                          • 使用者
                                          • 群組
                                          • 搜尋
                                          • Get Qt Extensions
                                          • Unsolved