C 试着做一个循环,计算字母而不是空格

C 试着做一个循环,计算字母而不是空格,c,increment,isalpha,C,Increment,Isalpha,我正在尝试构造一个简单的程序来计算用户输入的字母数。我的想法是使用for循环,循环字符串中的每个字母,增加一个计数器,最后返回最终的计数器总数。但是,我不想让程序计算空格-我尝试使用isalpha函数来计算空格-但我似乎没有正确格式化它。另外,我试图使计数器不增加空格的方法是使用c=c,但是,这似乎也是不正确的。以下是我迄今为止编写的代码: int c = 0; int main(void) { string s = get_string("Input: ");

我正在尝试构造一个简单的程序来计算用户输入的字母数。我的想法是使用
for
循环,循环字符串中的每个字母,增加一个计数器,最后返回最终的计数器总数。但是,我不想让程序计算空格-我尝试使用
isalpha
函数来计算空格-但我似乎没有正确格式化它。另外,我试图使计数器不增加空格的方法是使用
c=c
,但是,这似乎也是不正确的。以下是我迄今为止编写的代码:

int c = 0;

int main(void)
{
    string s = get_string("Input:  ");
    printf("Output: ");
    for (int i = 0; i < strlen(s); i++)
    {
    if( s[i] (isalpha))
        {
        c++;
        }
    else
        {
        c = c;
        }
    }
    printf("%i\n", c);
}
intc=0;
内部主(空)
{
字符串s=获取字符串(“输入:”);
printf(“输出:”);
对于(int i=0;i
isalpha
实际上是一个函数调用。(它是一个函数调用或类似函数的宏。)函数调用根据传递的参数是零、一个还是多个而写为
name()
name(argument)
、或
name(argument…)
isalpha
接受一个参数。该参数应为
无符号字符
值。因此,您可以将其称为
isalpha((unsigned char)s[i])
。您的
if
语句应该如下所示:

if (isalpha((unsigned char) s[i]))
您的程序还应该包含
#include
,以包含声明
isalpha

此记录的头

s[i] (isalpha)
是不正确的,没有意义

您需要的是以下内容

size_t c = 0;

for ( size_t i = 0; s[i] != '\0'; i++ )
{
    if( isalpha( ( unsigned char )s[i] ) ) ++c;
}
printf("c = %zu\n", c );

请注意,函数
isalpha
是在必须包含的标题
中声明的。

提问时,请包含一个。这意味着您应该包含再现问题的完整源代码。您的代码使用的是
字符串
,它不是标准的C标识符。很可能,您正在学习哈佛大学的CS50课程,而您的实际文本包含一行内容,如
#include“CS50.h”
。您应该在问题中提供的源代码中说明这一点。切勿将问题描述为“但我似乎对其格式设置不正确”。请说明您观察到的错误消息或不希望出现的行为。陈述你想要的行为。说明你做了什么导致了不想要的行为。这可能是“我编译了这里显示的源代码,结果是编译器打印了一条消息“xyz”,但我希望程序编译时没有错误。”@EricPostFischil谢谢你的建议,我以后一定会遵循这些指导原则。非常感谢,你知道我需要做什么才能使计数器不增加空格吗?@BlueKhakis:你不需要做任何事情才能使计数器不增加空格。
else
部分的大括号可以是空的,比如
else{}
,或者您可以完全忽略
else
部分。同样,我们也不知道您在这方面遇到了什么问题,因为您没有说它“似乎不正确”。我们不知道这是否意味着您收到了来自编译器的错误消息,或者是哪条消息,或者程序是否没有按您希望的方式运行,或者是否存在其他问题。好的,谢谢,我将更加努力地描述未来的问题。嗨,弗拉德,你能解释一下你发布的代码中的“size\u t”是什么吗?@BlueKhakis:
size\u t
是一种无符号整数类型,通常用于表示数组索引。谢谢@JohnBode。