I'm fairly new to coding. I am trying to compare char input value with array values, but it seems my code isn't comparing it (correctly) at all.
The code I have so far is:
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;
}
Because C doesn't really have a string
type, but instead a arrays of characters, the ==
will not work like it would with C++'s std::string or Rust's std::string::String.
Whats actually happening when you use ==
with arrays of characters, is that the arrays "decay" into pointers, and the == operator is actually just saying "is the memory location of casa
the same memory location as tabela[j][i]
"?
What you should do is use the standard library function strcmp
(if you can, use strncmp
as using strcmp
can result in code vulnerabilities).
So instead of:
if (casa == tabela[j][i]) { /* CODE*/ }
do:
if (strcmp(casa, tabela[j][i]) == 0) { /* CODE*/ }
or even better:
if (strncmp(casa, tabela[j][i], 80) == 0) { /* CODE*/ }
You can find the man pages online for strncmp/strcmp and such online by just searching "foo man page" (where foo is obviously replaced with strncmp or something like that).
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.