gpt4 book ai didi

c - 在 char 数组中搜索 char

转载 作者:太空宇宙 更新时间:2023-11-04 07:26:19 25 4
gpt4 key购买 nike

我一直在尝试遍历预定的字符数组,并将其与扫描的单个字符进行比较。如果扫描的字符在数组中,我想将它添加到二维数组中,如果它不在我想要错误处理的数组中。

目前我的代码是

    char c;
char legalChar[] = "./\\=@ABCDEFGHIJKLMNOPQRSTUVWXYZ\n";
int rowCount = 0;
int colCOunt = 0;
int i = 0;
FILE * map;

while (c = fgetc(map), c != EOF) {
while (i < (sizeof(legalChar))){
if (c == legalChar[i]){
if (c == '\n'){
/*Add 1 to number of rows and start counting columns again */
rowCount++;
colCount = 0;
}
else {
/*would have code to add char to 2d array here */
colCount++;
}
}
i++;
}

我本来打算有

    if (c != legalChar[i]){
/*Error handling */
}

但这不起作用,因为它只是在每次迭代时跳转到此 if 语句。

目前程序的输出是 colCount 被分配为 1,rowCount 保持为 0。迭代的所有字符都在 legalChar[] 数组中,所以我不确定我做错了什么。

如有任何建议,我们将不胜感激。

谢谢

最佳答案

您的问题是 if (c != legalChar[i]) 几乎总是正确的。假设输入的字符是M,明明在legalChar中。如果您检查 c != legalChar[i],您是第一次检查 c != '.',这显然是正确的。

处理此问题的更好方法是设置一个以 false 开头的标志值,并在您找到某些内容时将其设置为 true。完成循环后,如果标志仍然为假,那么您就知道找不到该值。

此外,每次执行循环时都应重置 ifor 循环比 while 循环更有意义,特别是如果您使用的是 c99,因为 i 可以在循环中声明..

int c;
char legalChar[] = "./\\=@ABCDEFGHIJKLMNOPQRSTUVWXYZ\n";
int rowCount = 0;
int colCOunt = 0;
int i = 0;
int found = 0;
FILE * map;

while (c = fgetc(map), c != EOF) {
found = 0;
for (i = 0; i < sizeof(legalChar); i++){
if (c == legalChar[i]){
if (c == '\n'){
/*Add 1 to number of rows and start counting columns again */
rowCount++;
colCount = 0;
}
else {
/*would have code to add char to 2d array here */
colCount++;
}
found = 1;
// break out of loop here?
}
}
if (!found) {
// Error handling here
}
}

关于c - 在 char 数组中搜索 char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18117399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com