#arrays #c #compare
#массивы #c #Сравнить
Вопрос:
Я довольно новичок в программировании. Я пытаюсь сравнить входное значение символа со значениями массива, но, похоже, мой код вообще не сравнивает его (правильно).
Код, который у меня есть до сих пор:
int main() {
int colunas = 5;
int linhas = 6;
char casa[80];
char tabela[80][6][5] = {{"a5", "b5", "c5", "d5", "e5", "f5"},
{"a4", "b4", "c4", "d4", "e4", "f4"},
{"a3", "b3", "c3", "d3", "e3", "f3"},
{"a2", "b2", "c2", "d2", "e2", "f2"},
{"a1", "b1", "c1", "d1", "e1", "f1"}};
scanf("%s", casa);
for (int i = 0;i< colunas; i ) {
for (int j = 0;j < linhas; j ) {
printf("%s",tabela[i][j]);
// Problem happens here.
if (casa == tabela[j][i]) {
printf("Verdade");
}
}
printf("n");
}
printf("%s", casa);
return 0;
}
Комментарии:
1. Вам нужно использовать
strcmp()
для сравнения строк.2. Массивы @MiloBanks автоматически распадаются на указатели.
Ответ №1:
Поскольку C на самом деле не имеет string
типа, а вместо него массив символов, ==
он не будет работать так, как это было бы с std::string C или std::string::String от Rust.
Что на самом деле происходит при использовании ==
с массивами символов, так это то, что массивы «распадаются» на указатели, а оператор == на самом деле просто говорит: «является ли ячейка памяти casa
той же ячейкой памяти, tabela[j][i]
что и «?
Что вам следует сделать, так это использовать стандартную библиотечную функцию strcmp
(если вы можете, используйте strncmp
, поскольку использование strcmp
может привести к уязвимостям кода).
Поэтому вместо:
if (casa == tabela[j][i]) { /* CODE*/ }
выполнить:
if (strcmp(casa, tabela[j][i]) == 0) { /* CODE*/ }
или даже лучше:
if (strncmp(casa, tabela[j][i], 80) == 0) { /* CODE*/ }
Вы можете найти справочные страницы в Интернете для strncmp / strcmp и тому подобное в Интернете, просто выполнив поиск «foo man page» (где foo, очевидно, заменяется на strncmp или что-то в этом роде).
Комментарии:
1. Спасибо, я сделал именно это, но теперь оператор else всегда печатается, даже если он не нужен. Немного расстроен, но я рад, что продвигаюсь.