我继续得到“左手需要左值”,我不知道如何解决它[关闭]

问题描述 投票:-2回答:2

基本上我需要在一个字符数组中给出元音的数量(最后一个子程序,但我继续得到这个错误,说“左值作为赋值的左操作数”我试图在我自己的搜索中找到它意味着什么(和有答案)但是因为它与我所做的不完全相同,我仍然没有真正得到它。有人可以向我解释我需要做什么吗?

https://pastebin.com/gN3zCWJJ

#include <stdio.h>
#include <string.h>

int Anzahl (char *);
void Umgekehrt (char *, char *, int);
int Grossbuchstaben (char *, int);
int Anzahl2 (char *, int);

int main ()
{
    char kette[51], kette2[51];
    int x, grossbuchstabenzahl, AnzahlVokale;

    printf ("Schreiben Sie etwas\n");
    fgets (kette, 51, stdin);
    x = Anzahl (kette);
    printf ("es gibt %d zeichen in der Zeichenkette\n", x);
    Umgekehrt (kette, kette2, x);
    grossbuchstabenzahl = Grossbuchstaben (kette, x);
    printf ("Die Anzahl die Grossbuchstaben ist: %d\n", grossbuchstabenzahl);
    AnzahlVokale = Anzahl2 (kette, x);
    printf ("Es gibt %d Vokale in der Zeichenkette", AnzahlVokale);
}

int Anzahl (char *kette)
{
    int x;
    puts (kette);
    x = strlen (kette) - 1;
    return x;
}

void Umgekehrt (char *kette, char *kette2, int x)
{
    int i;
    for (i = x; i >= 0; i--) {
        kette2[x - i] = kette[i];
    }
    puts (kette2);
}

int Grossbuchstaben (char *kette, int x)
{
    int i, grossbuchstabenzahl;
    grossbuchstabenzahl = 0;
    for (i = 0; i <= x; i++) {
        if (kette[i] > 'A' & kette[i] < 'Z') {
            grossbuchstabenzahl += 1;
        }
    }
    return grossbuchstabenzahl;
}

int Anzahl2 (char *kette, int x)
{
    int i, AnzahlVokale;
    AnzahlVokale = 0;
    for (i = 0; i <= x; i++) {
        if (kette[i] = 'a' | kette[i] = 'A' | kette[i] = 'e' | kette[i] =
            'E' | kette[i] = 'u' | kette[i] = 'U' | kette[i] =
            'i' | kette[i] = 'I' | kette[i] = 'o' | kette[i] =
            'O' | kette[i] = 'y' | kette[i] = 'Y') {
            AnzahlVokale += 1;
        }
    }
    return AnzahlVokale;
}
c lvalue
2个回答
2
投票
| kette[i]='o' | kette[i]='O' | kette[i]='y' | kette[i] ='Y' )
                                                       ^^^

错误在这里。

你试图分配给它,你应该使用==

而且你必须使用逻辑或||而不是按位或|

所以纠正的比较是

kette[i]=='a' || kette[i]== 'A' || ...

kette[i]> 'A' & kette[i]< 'Z'

将会

kette[i]>='A' && kette[i]<='Z' //You were earlier missing the `A` and `Z`

你也可以使用strchr()这个角色是否是"aeiouyAEIOUY"之一。像这样的东西

if (strchr("aeiouyYAEIOU", kette[i]))    
        AnzahlVokale+=1;   

您没有检查fgets的返回值。您应该检查它以了解对fgets()的调用是否成功。


1
投票

这里的主要问题是位于函数Anzahl2中,在这里你迭代名为kette的数组。在if声明中,您有2个问题。

  1. 您不是要比较数组的实际单元格,而是将新值int分配给单元格。使用==(等于运算符)而不是=(赋值运算符)。
  2. if语句中的每个比较都应该由||(二进制或二进制)的|(逻辑或)分隔。
© www.soinside.com 2019 - 2024. All rights reserved.