柜台麻烦

Counter trouble

诚然,显然我是这个编码的新手。我很喜欢解决这个问题,但我觉得自己被这个问题困住了。任何指导将不胜感激!

我试图计算来自用户的特定文本的所有字母,但是当我 运行 程序时,无论输入如何,我的计数器 (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
        }

}

再次感谢任何指导(尽可能简单!),因为我这两天一直在努力解决这个问题。

在你的 for 循环中,i < 1 部分意味着当 i 小于 1 时你将循环,它在第一个循环中被初始化为 0,所以它 运行s(并且计数为 1) ,然后在循环结束时,i 递增到 1,因此循环不会再次 运行。您需要将 i < n 而不是 i < 1。并且您还需要将计数器更改为 j(或另一个变量),如评论中所述。

所以我对您的代码进行了一些编辑,使其变得有意义,我将尝试解释为什么我更改了一些内容。我对 c/c++ 有点生疏,所以如果有人能指出我的错误,我将不胜感激。

所以这里有一段代码可以计算字母的数量。

#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 < 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

我们从 0 开始 i,一直到 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 循环之外,你只需要一个计数器来计算 'i' 被迭代了多少次for 循环,所以你得到 4.