【问题标题】:CS50 C issues error: array initializer must be an initializer list or string literalCS50 C 发出错误:数组初始值设定项必须是初始值设定项列表或字符串文字
【发布时间】:2020-07-31 19:56:14
【问题描述】:

我一直在想如何为 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);

};

};

我每次得到的错误信息是“readability.c:8:6: error: array initializer must be an initializer list or string literal”

希望能提供帮助,谢谢!

【问题讨论】:

  • char text[] -> char *text

标签: c char c-strings cs50


【解决方案1】:

函数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] != ' 

否则你试图将一个字符与一个没有意义的指针进行比较。

您必须使用可变字母来代替用作索引的可变长度。虽然引入变量字母是多余的。您可以使用可变长度而不是可变字母,其名称只会使代码的读者感到困惑。

【讨论】:

    猜你喜欢
    • 2019-04-16
    • 1970-01-01
    • 2021-10-29
    • 2011-01-03
    • 2020-02-23
    • 2010-10-03
    • 2015-09-20
    • 2016-01-22
    • 1970-01-01
    相关资源
    最近更新 更多