CS50 C выдает ошибку: инициализатор массива должен быть списком инициализатора или строковым литералом - PullRequest
0 голосов
/ 18 апреля 2020

Я застрял в поиске того, как создать правильный массив для C

, вот мой код:

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

int main(void) {

char text[] = get_string("Text: ");
int length =  strlen (text);
int letters = 0;
int letter = length;
while (letter > 0)
{
    letter--;
    if (text[length] == " " ||text[length] == "." ||text[length] == "!" ||text[length] == "?")
    {
        letters = letters + 0;
    }
    else { 
        letters++;
    };
printf ("%i \n", letters);

};

};

Сообщение об ошибке, которое я получаю каждый раз, это «читабельность» . c: 8: 6: ошибка: инициализатор массива должен быть списком инициализатора или строковым литералом "

Помощь будет оценена, спасибо!

1 Ответ

0 голосов
/ 18 апреля 2020

Функция get_string возвращает указатель на введенную строку. Вы не можете инициализировать массив символов указателем. Поэтому напишите либо

char *text = get_string("Text: ");

, либо, насколько я знаю

 string text = get_string("Text: ");

Обратите внимание, что это утверждение

letters = letters + 0;

не имеет большого смысла. )

и символ ';' после закрывающей скобки является лишним. Он вводит пустой оператор, который не имеет никакого эффекта.

Оператор if

if (text[length] == " " ||text[length] == "." ||text[length] == "!" ||text[length] == "?")
{
    letters = letters + 0;
}
else { 
    letters++;
};

может быть переписан как

if ( text[letter] != '  && text[letter] != '.' && text[letter] != '!' && text[letter] != '?')
{
    letters++;
};

Используйте символьные литералы вместо строковых литералов. Например, вместо

text[letter] == " "

или

text[letter] != " "

используйте

text[letter] == ' '

или

text[letter] != ' 

В противном случае вы пытаетесь сравнивайте символ с указателем, который не имеет смысла.

И вместо переменной длины, используемой в качестве индекса, вы должны использовать переменную букву. Хотя введение переменной буквы излишне. Вы можете использовать переменную длину вместо буквы переменной, имя которой только сбивает с толку читателя кода.

...