標籤:

這個程序哪裡錯了,還是G++出了問題?

RT。。不太懂啊。。。。


第九行字元串數組初始化時的基本語法問題。

Hard coded是很壞的習慣。如果非要這樣不妨用循環以及make sense的變數來生成。


二維字元串初始化的時候,每個單詞一對雙引號就成,不需要額外的引號。我看你是想每一行再加一對,這樣不對。


string scales[3][12] = {"" xxx ""};

多了一對雙引號?都說不要用那些亂七八糟的編輯器了,老老實實裝Windows開Visual Studio,把代碼貼進去瞬間就明白了。


別換編輯器。

等你技術純熟了,會喜歡上vim ,g++,gdb的。簡潔,優雅,高效。

現在要做的就是打牢基礎。


連IDE和EDITOR都區分不清你噴什麼噴?人家輪子噴但是他懂行,不懂就不要噴好么?

vim不提供語法檢查,想在vim里用語法檢查你需要配置clang-check, clang-tidy, flycheck, syntastic這些東西。

配置好了是這樣:自動跳到錯誤位置。(我只用syntastic和clang-check)

新手還是先用IDE吧。再說一遍vim是編輯器不是IDE,知乎無腦噴越來越多了。


我看到樓主在root許可權下用g++編譯vim編輯的c++文件,這樣的配置逼格倒是夠了。

不過樓主倒是至少把c語言的數組搞清楚再來啊。


知乎都帶做作業了


用Kali 6666


以後遇到作業不知道該怎麼debug,截個圖上傳知乎,然後再邀請幾個大V來解決。現在的同學們太聰明了~


這個程序問題多多啊。

第一點numeric constant,明顯意思是出現了數值常量。於是你應該知道你的引號有問題。

第二點string引用,#include &(可以通過,但最好還是寫一下)

第三點g++ 5.c -o 5.o。C++默認文件擴展名是.C, .cpp, .cc, .cxx等。儘管g++默認C++編譯,仍然建議區分。

看不出錯誤,是因為vim的數字和字元串一個顏色:

見到樓上有提到VSC,順便放一張Visual Studio Code的(Linux下):

-----------我是題外話------------

學習的時候使用g++是好事,相比VC++,g++檢查嚴格,利於學習標準C++。

命令行建議g++ -Wall。開警告,幫助學習。

不過g++有許多不好的地方,比如編譯錯誤會出現一大堆無關信息。(題主就遇到了)

還有經典的亂七八糟就是cout輸出一個未設置的類型。然後會出現上千行。OTZ

總的來說,使用g++,得到嚴格檢查的同時,還要同時與這些無關的信息打交道。

這個時候給一個小建議,切換到Windows,打開VS,把代碼放進去,編譯。。。


題主,給你幾個網站,以後可以用來貼代碼,便於交流(短時間內)。

http://codepad.org/

http://paste.ubuntu.com

吐槽一下,讓大家看著圖片找bug,實在很狗血啊!


當程序編譯不通過的時候能不能懷疑編譯器有問題? 當然可以,然而,It should be your last option! 你的第一選擇應該是懷疑自己代碼有問題,特別是代碼僅僅完成一些簡單邏輯和功能的時候。

題主想初始化一個3行12列的二維string數組,然後使用了重複的雙引號{""x",... ... "y"" ......}來區分行列,很遺憾編譯器不認為這是正確的初始化語法。所以,既然編譯器不認可那麼不如使用認可的語法,比如以下2行3列的數組。

String [2][3]a={

{"1","2","3"},

{"4","5","6"}

};

牽扯到大量數據的操作,hardcode不是一個好習慣,題主需要一個簡單易用的資料庫來儲存數據,比如hsqldb或者mysql之類的。

不過,既然題主提到了C++,一般我們在C++中並不直接聲明數組,而是使用更安全和方便的STL庫。比如你可以用一下方法定義一個二維數組然後使用,好處是不用硬編碼數組大小,方便擴展,不用擔心越界等。

include &

include &

using namespace std;

typedef vector& xlist;

typedef vector& xlists;

int main()

{

//initialization

... ...

xlists[][];

}


Linux下還是用clang吧,gcc報錯有時候看不懂,不太友好。


  1. #include &
    #include&
    #include&
    #include&
    #include&
    using namespace std;
    struct Node
    {
    int vlaue;
    Node *next;
    };
    Node *head;
    Node*CreatList(int n)
    {
    Node *first=NULL;
    Node *tmp=NULL;
    Node *one=NULL;
    while(n--)
    {
    tmp=new Node ;
    cin&>&>tmp-&>vlaue;
    tmp-&>next=NULL;
    if(first==NULL)
    first=tmp;
    else
    {
    one-&>next=tmp;

    }
    one=tmp;

    }
    return first;
    }
    /*this code intended to delete a number from a single list
    * but the second number can"t be removed because unknown reasons
    * */
    void DeleteElement(Node **first,int value)
    {
    Node *current=NULL;
    while((current=*first)!=NULL)
    {
    if(current-&>vlaue==value)
    {
    *first=current-&>next;
    first=current-&>next;
    delete current;
    }
    first=current-&>next;
    }

    }
    /*this code do the samething with the upper code
    * but this code I think has some drawbacks but it work
    * how to improve this code or something to rewrite the code for the same funtion*/

    Node *Delete(Node *first,int value)
    {
    Node *current=first;
    Node *one=NULL;
    Node *previous=NULL;
    for(current=first;current!=NULL;previous=current,current=current-&>next)
    {
    if(current-&>vlaue==valuecurrent==first)
    {
    first=current-&>next;
    delete current;
    continue;
    }
    if(current-&>vlaue==value)
    {
    previous-&>next=current-&>next;
    one=current;
    current=previous;
    delete one;

    }
    }
    return first;
    }

    void ShowList(Node *first)
    {
    int label=0;
    while(first!=NULL)
    {
    if(!label)
    {
    cout&<&vlaue;
    label=1;
    }
    else
    cout&<&<" "&<&vlaue;
    first=first-&>next;
    }
    }

    int main(void)
    {
    /*the test data is
    *20
    1 3 3 0 -3 5 6 8 3 10 22 -1 3 5 11 20 100 3 9 3
    3*/
    freopen("/home/ldy/data","r",stdin);
    int n;
    cin&>&>n;
    Node *first=CreatList(n);
    int m;
    cin&>&>m;
    // first=Delete(first,m);//this funtion work but not good
    DeleteElement(first,m);//this funtion doesn"t work

    ShowList(first);
    }

    有人幫我看看這個鏈表指針哪裡出錯了嗎。。感激不盡。出錯的地方是那個函數。有兩個函數

  2. 一個可以得到正確結果,不過代碼還是覺得不好,希望知道如何寫,另一個出錯的真的不知道哪裡錯了。代碼是刪除鏈表裡面的特定元素。
  3. 測試用例是
  4. 20

    1 3 3 0 -3 5 6 8 3 10 22 -1 3 5 11 20 100 3 9 3

    3

  5. 這是出錯那個函數輸出的結果。
  6. 這是輸出正確那個函數的輸出結果。


用的VIM?哎,好好的IDE不用,何苦呢。。。

編譯提示很明顯了,line9 數字常量前缺少},數字常量1.1前面是空字元串,估計你本意是想轉義

另外,你好像沒明白數組的含義


推薦閱讀:

為什麼儘管 C++ 早就有了很多現代功能,但是卻長期給人原始的印象呢?
GCC 下 C++ 中 new int[] 內存的額外信息在哪裡?
如何利用C++的特性,去實現C中的可變參?
一個關於visual studio的問題?

TAG:C | GCC | g |