簡體   English   中英

使用C ++的Xcode系統清除和“未使用表達式結果”錯誤

[英]Xcode system clear and “expression result unused” error using C++

嘗試用Xcode編寫Tic Tac Toe游戲來練習C ++時,我遇到了各種各樣的問題,這些問題我大多已經解決了,但是我仍然很難理解為什么會出現以下錯誤以及如何正確修復他們/避免他們。

問題一:

我已經鏈接了curses庫,但是仍然出現此錯誤:不建議從字符串文字轉換為'char *'

#include <unistd.h>
#include <term.h>
void ClearScreen()
{
if (!cur_term)
{
    int result;
    setupterm( NULL, STDOUT_FILENO, &result );
    if (result <= 0) return;
}
putp( tigetstr( "clear" ) );
}  

問題2:我一直收到未使用的實體問題表達式結果未使用 )。
(gridBox是char類型的2維數組,player也是char類型,都是全局變量。)

    if (gridBox[0,0] == gridBox[1,0] && gridBox[1,0] == gridBox[2,0]) {

    if (player == 'X') {
        return 'X';
    }
    if (player == 'O') {
        return 'O';
    }
}

問題3:當我嘗試將上一個問題中的if語句更改為...

    if (gridBox[0,0] == 'X' && gridBox[1,0] == 'X' && gridBox[2,0] == 'X') {
    return 'X';
}

我得到這個錯誤: 指針和整數('char *'和'int')之間的比較

這讓我完全發瘋,請幫忙。

謝謝大家!

  1. 就是這樣:從字符串文字(例如"clear"隱式轉換為指向非const char char*的指針,出於歷史原因,過去曾經允許這樣做,但由於不安全而被棄用。
    與C庫或舊代碼交互時,這可能會導致一些問題,但通常很容易解決。

    將其替換為非const數組:

    char clear[] = "clear"; putp(tigetstr(clear));

  2. 是由錯誤的索引方式引起的; 一個二維數組是一個數組數組,它​​的索引如下:

    gridBox[0][0]

    逗號操作符是在某些情況下使用,如果您希望按順序來評價兩個表達式,並丟掉第一的結果- a, b返回的值b ,所以gridBox[0,0]相當於gridBox[0] 在實踐中,這種情況非常罕見-很少有編譯器開始發出警告,因為這幾乎從來都不是您想要的。

  3. 由於gridBoxchar數組的數組,並且由於第2點), gridBox[0,0]等效於gridBox[0]gridBox[0]是char數組。
    您不能使用==比較數組。 而是將它們隱式轉換為指向數組第一個元素的指針,然后將其用於比較。 因此,左手邊是char* ,而右手邊被提升為int以便進行比較,而這兩個對象無法進行比較。
    如果您解決了索引編制問題,此問題將同時消失。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM