【问题标题】:Counter trouble [duplicate]反麻烦[重复]
【发布时间】:2023-03-09 02:32:01
【问题描述】:

另外,很明显我对这个编码很陌生。我很享受解决这个问题,但我觉得被这个问题困住了。任何指导将不胜感激!

我正在尝试计算来自用户的特定文本的所有字母,但是当我运行程序时我的计数器 (i) 显示为 1,而不管输入如何。下面是我的代码。

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



int main(void)
{

    string a = get_string("Text: \n"); // Get input


    for (int i = 0, n = strlen(a); i < 1; i++) //Set counter for number of letters
        {
        if isalpha(a[i]). // Count only if character is a letter
            {i++;}
         printf("%i\n", i); // print counter
        }

}

再次感谢任何指导(用尽可能简单的术语!),因为我已经尝试了两天来解决这个问题。

【问题讨论】:

  • 1.您将i 用作计数器和循环迭代器。 2. 您的for 循环只查看第一个字符,因为条件是i&lt;1
  • C 没有类型 string。这是特殊的CS50类型吗?你在用 C++ 吗?
  • 你已经在 3 天前问过这个问题,然后得到了一些非常好的答案。 stackoverflow.com/questions/61399924/…
  • 感谢 kaylum 和 abelenky 的帮助。 Abelenky,我确实问了一个类似的问题,但根据这些答案无法正确回答。同样,我的理解可能比不合理的建议更多。

标签: c counter cs50


【解决方案1】:

所以我已经对你的代码进行了一些编辑,使其有意义,我将尝试解释为什么我改变了一些东西。我对 c/c++ 有点生疏,所以如果有人能指出我的问题,我将不胜感激。

所以这是一个可以计算字母数量的sn-p代码。

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



int main(void)
{

    char a[] = "test";
    int n = strlen(a);
    int i = 0;


    for (i = 0; i < n; i++) //Set counter for number of letters
        {

        }
        printf("%i\n", i); // print counter

}

所以你的代码有几件事。

(1)for (int i = 0, n = strlen(a); i &lt; 1; i++)

for 循环如下所示

for(where you start your loop at ; where you stop; count up or down)

所以我用你的代码做了这个:

for (i = 0; i < n; i++) //Set counter for number of letters

i 从 0 开始,直到 i 达到 n 并计数

现在你可以这样做,如果它更有意义的话:

for (i = 0; i < n; i++) //Set counter for number of letters
        {
            i++;
        }

但他们都会做同样的事情(我认为),因为我们正在迭代 i,但我确实认为这更好,因为可读性。

(2)printf("%i\n", i); // print counter

您可能知道这会打印出字母的数量,并且您在 for 循环中有这个,当您执行倒计时之类的操作时这很好。所以如果我们把它放在 for 循环中,它会是这样的:

for (i = 0; i < n; i++) //Set counter for number of letters
        {
          printf("%i\n", i); // print counter
        }

它会在哪里打印出 0 1 2 3(记住数组总是从 0 开始),所以通过将它保持在 for 循环之外,您只需一个计数器,用于计算在 for 循环中迭代 'i' 的次数,所以你得到 4。

【讨论】:

  • 感谢您给我看 - 我很欣赏查看 for 循环的不同方式。这绝对有助于前进。我认为您的代码的问题是我必须要求用户输入,所以他们的输入可能是句子或段落很长,我仍然会回去数字母。这就是我认为 strlen 和 isalpha 在这里发挥作用的地方。如果我只是运行您的代码,它将使用预定的单词。希望这是有道理的,再次感谢您的关注。
  • 我只是能够实现你所说的并让它发挥作用!非常感谢-正如上述评论者所提到的,我已经坚持了好几天了。现在我让它工作并明白我哪里出错了。非常感谢!
【解决方案2】:

在您的 for 循环中, i

【讨论】:

  • 感谢您的解释,这绝对有帮助!
  • @Dizzy_Parking 没问题,随时
猜你喜欢
  • 2017-01-11
  • 1970-01-01
  • 1970-01-01
  • 2012-09-13
  • 2013-06-15
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 2016-05-11
相关资源
最近更新 更多