【问题标题】:How do I count the number of letters in this Readability Program我如何计算这个可读性程序中的字母数量
【发布时间】:2020-07-05 06:14:00
【问题描述】:

我正在尝试计算用户输入中的字母数量,但是,我不断收到 分段错误。谁能告诉我如何纠正这个问题。谢谢!


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

    int count_letters(int length, string array[]);

    int main(void)
    {
        string Text = get_string("Text:");
        int len = strlen(Text);
        printf("%i letter(s)\n", count_letters(len, &Text));
    }

    int count_letters(int length, string array[])
    {
        int letters = 0;
        for(int i = 0; i < length ; i++)
        {
             if (isalpha(array[i]))
             {
                 letters++;
             }
        }
        return letters;
    }

【问题讨论】:

  • 什么是get_string()?此外,string 作为 C 中的一种类型非常模糊。我希望看到char *const char *。基本上如果字符串已经是一个指针,你不应该传递它的地址。另外,打开警告,因为如果你允许编译器会告诉你这些信息。
  • 很抱歉,我不太明白您要说什么。我正在使用 get_string() 进行用户输入。我尝试使用 char * 和 const char * 但这会导致许多其他错误。也没有编译问题,它只是说分段错误。
  • 我希望cs50 和它的“字符串”typedef 会消失,而这些学生只会被教导字符数组如何形成字符串的概念。似乎是一个没有太多好处的泄漏抽象。
  • 打开所有警告,看看编译器说了什么。此外,告诉崩溃发生在哪一行也会有所帮助。

标签: c count user-input cs50 letter


【解决方案1】:

int count_letters(int length, string array[]) 中,参数array 已经是[a pointer to] 一个字符数组,[] 是错误的。

如果您将其更改为int count_letters(int length, string array) 并从main 调用它为count_letters(len, Text),程序将运行。

注意cs50.h 已经将string 声明为char *

(我完全同意 Christian Gibbins 的观点,即应该从 cs50.h 中删除此 string 数据类型)

【讨论】:

    猜你喜欢
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 2015-05-11
    相关资源
    最近更新 更多