c - Else 子句不执行 C

标签 c arrays if-statement char arr

我正在使用指向字符数组的指针。这段代码应该切换字母的大小写,删除数字,打印两个空格而不是一个,并以相同的方式打印所有其他字符。除了打印其他字符相同之外,其余所有操作都很好。这看起来应该不是问题,但我无法弄清楚。看到任何看起来不对的地方吗?

void compareDuplicates(FILE * ifp, char mode){

    /* size MAXCHARS+1 to hold full array + null terminate*/
    char newArray [MAXCHARS +1] = {0};
    char oldArray [MAXCHARS +1] = {0};
    char * newStr = newArray;
    char * oldStr = oldArray;
    char * tempStr;
            /* fill array, test for EOF*/
            while(fgets(newStr,MAXCHARS, ifp)){
//if strings are the same, do not print anything
                    if(strcmp(newStr, oldStr) !=0){
//else print
                            testStrings(newStr);
                    }
//set oldStr pointer to newStr, set newStr pointer to oldStr reset newStr memory 
//reset memory of newStr to all null chars
                            tempStr = oldStr;
                            oldStr = newStr;
                            newStr = tempStr;
                            memset(newStr,'\0',MAXCHARS);

            }

} 

void testStrings(char * array1){
    int i = 0;
    char c;
    while(*(array1+i) != '\0'){
            if(*(array1+i) >= 'A' && *(array1+i) <= 'Z'){
                    c = *(array1+i)+32;
                    printf("%c",c);
            }
            else if(*(array1+i) >= 'a' && *(array1+i) <='z'){
                    c = *(array1+i)-32;
                    printf("%c",c);
            }
            else if(*(array1+i) == ' '){
                    c = *(array1+i);
                    printf("%c",c);
                    printf("%c",c);
            }
            else if(*(array1+i) >= '0' || *(array1+i) <= '9'){
                    i++;
                    continue;
            }
            else{
                    c = *(array1+i);
                    printf("%c",c);
            }
            i++;
    }
    printf("\n");
}

例如,如果给出以下行:

CONSECUTIVE_LINE
CONSECUTIVE_LINE
CONSECUTIVE_LINE
123 REPEAT 
123 REPEAT 
232unique-line

输出将是:

consecutiveline
  repeat
UNIQUELINE

表示连续行的删除、大小写的改变、一处加两个空格、数字的删除。但是,它不会打印正常的下划线和其他非目标字符。

最佳答案

本次测试...

*(array1+i) >= '0' || *(array1+i) <= '9'

...将始终产生 true。您检查的任何字符都将超过 '0' 小于'9'因为'0' < '9' 。您可能想检查一个字符是否在此范围内,这需要 && (逻辑与),就像您在所有其他操作中所做的那样。

顺便说一句,不要假设字符编码会将字母字符按顺序排列。仅保证数字字符为真。更好的检查将利用 isalpha islower isupper 来自标准库的ctype.h header 。

关于c - Else 子句不执行 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50111394/

相关文章:

c - Unix下最快的删除目录

python - 将 numpy-C 数组转换为 C double* [] 并返回

java - 在java中使用递归来查找数组中的下一个 double ?

C# 将字节数组 append 到现有文件

java - 我可以使用逻辑或运算符来测试 if 语句中的两个条件吗?

javascript - 为 "IF"编写具有多个选项的 Jquery If 语句的更短方法

c - 根据c程序中输入的月份和日期显示假期名称

c - 二叉树 : user decides whether it should be a number tree or a word tree in c programming

java - 使用 bigInteger 和其他方法重建字节数组

r - 为什么 if 函数不检查整数?