【问题标题】:How to fix this expression is not assignable error?如何修复此表达式不可分配错误?
【发布时间】:2019-06-05 10:59:21
【问题描述】:

我需要在我有一个字符串并且它应该都是元音的情况下执行此方法,否则该方法将返回 false,但我收到此表达式可分配错误,我只是编码的初学者,有人可以帮助我吗?谢谢!

int verify_vowel(char *string, char elem, int length){
    if(string != NULL){
        value= TRUE;
        for (i=0; i<length && value == TRUE; i++) {
            if(string[i] == elem){
                int is_vowel(char element);
                value = TRUE;
            }else{
                value= FALSE;
            }
        }
    }
    return 1;
}
int is_vowel(char element){
    int j;
    int value1;
    int length;
    char string2[LENGTH];
    value1= TRUE;
    for(j=0; j<length && value1== TRUE; j++){
        if(string2[j]= 'a' && string2[j]= 'e' && string2[j]='i' && string2[j]='o' && string2[j]= 'u'){ //im getting the error here
            value1= TRUE;
        } else{
            value1= FALSE;
        }
    }
    int main(){
    char string[]= "aeiuodsf";
    int ret;
    ret= is_vowel(string);
    printf("Result: %d\n",ret);
    return 0;
}

【问题讨论】:

  • value 是在哪里定义的? TRUE/FALSE 是如何定义的?另外请发布完整的错误消息并详细说明它出现在代码的哪个位置(通常编译器会说它在哪一行有问题)
  • 好的,我现在看到评论你的问题是(string2[j]= 'a'.. 这是一个分配而不是比较你应该使用==。此外,该表达式将始终为 false,因为同一字符不能同时包含多个字符,您可以使用 || 逻辑或 strcmp()
  • 欢迎来到 SO。不幸的是,缺少某些部分:您从哪里得到此错误消息? value 在哪里定义?在verify_vowel 中声明is_vowel 的目的是什么?请阅读How To ask 并提供MCVE
  • ret= is_vowel(string);该函数采用char,但您提供char *
  • 请注意,verify_vowel() 未使用。代码有很多错误。例如在is_vowel() 中,变量char string2[LENGTH]; 没有被初始化,而是被检查。此外,迭代不会因失败而终止,而是返回最终字符的状态,而不管发现了什么。但是函数是不完整的,反正也不返回值。

标签: c c-strings


【解决方案1】:

= 用于赋值,== 用于比较(如果需要,也可以使用strcmp)。在这种情况下,您是在分配而不是比较,这就是您收到错误的原因。此外,从未使用过verify_vowel。你可以这样做

#include <stdio.h>

int is_vowel(char *element, int length){
    for(int j=0; j<length; j++){
        if(!(element[j]== 'a' || element[j]== 'e' || 
            element[j]== 'i' || element[j]== 'o' || 
            element[j]== 'u')){
            return 0;
        }
    }
    return 1;
}

int main()
{
    char *string= "aeifou";
    int ret;
    ret= is_vowel(string,strlen(string));
    printf("Result: %d\n",ret);
    return 0;
}

【讨论】:

    猜你喜欢
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    • 2023-04-04
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多