在C中显示字母数和小数位数

在C中显示字母数和小数位数,c,C,我已经在这个简单的代码上工作了好几个小时了,我不知道到底出了什么问题!我需要在标准输入中显示字母数和小数位数。到目前为止,我有: #include<stdio.h> #include<ctype.h> int isalpha(int); int isdigit (int); int main() { int c; while((c=getchar())!=EOF) printf("The number of letters is %d and th

我已经在这个简单的代码上工作了好几个小时了,我不知道到底出了什么问题!我需要在标准输入中显示字母数和小数位数。到目前为止,我有:

#include<stdio.h>
#include<ctype.h>
int isalpha(int);
int isdigit (int);
int main()
{
    int c;
    while((c=getchar())!=EOF)
    printf("The number of letters is %d and the number of digits is %d.\n", isalpha(c), isdigit(c));
    return 0;
}

int isalpha(int one)
{
    int ch;
    int i;
    i=0;
    scanf("%d", &ch);
    if(isalpha(ch))
        i++;
    return i;
}

int isdigit(int two)
{
    int a;
    int k;
    k=0;
    scanf("%d", &a);
    if(isdigit(a))
        k++;
    return k;
}
#包括
#包括
int-isalpha(int);
国际数字图书馆;
int main()
{
INTC;
而((c=getchar())!=EOF)
printf(“字母数为%d,数字数为%d.\n”,isalpha(c),isdigit(c));
返回0;
}
int isalpha(int one)
{
int-ch;
int i;
i=0;
scanf(“%d”和“ch”);
if(艾萨帕(ch))
i++;
返回i;
}
整数isdigit(整数二)
{
INTA;
int k;
k=0;
scanf(“%d”和“&a”);
if(isdigit(a))
k++;
返回k;
}

每当我试图运行它时,程序就会崩溃,我不知道代码的哪一部分出错了。虽然我在这个领域还没有太多的经验,所以非常感谢您的帮助!先谢谢你

只需轻轻使用现有的API,并获得如下所示的计数

    int alp = 0;
    int dig = 0;
    while ((c = getchar()) != EOF)
    {
       if (isalpha(c)
           alp++;
       else if (isdigit(c))
           dig++;
    }

    printf("The number of letters is %d and the number of digits is %d.\n", alp,dig);

PS:如果输入中有
\n
,请注意刷新换行符

只需轻轻使用现有的API并获得如下所示的计数

    int alp = 0;
    int dig = 0;
    while ((c = getchar()) != EOF)
    {
       if (isalpha(c)
           alp++;
       else if (isdigit(c))
           dig++;
    }

    printf("The number of letters is %d and the number of digits is %d.\n", alp,dig);

PS:如果输入中有
\n
,请注意刷新换行符

只需轻轻使用现有的API并获得如下所示的计数

    int alp = 0;
    int dig = 0;
    while ((c = getchar()) != EOF)
    {
       if (isalpha(c)
           alp++;
       else if (isdigit(c))
           dig++;
    }

    printf("The number of letters is %d and the number of digits is %d.\n", alp,dig);

PS:如果输入中有
\n
,请注意刷新换行符

只需轻轻使用现有的API并获得如下所示的计数

    int alp = 0;
    int dig = 0;
    while ((c = getchar()) != EOF)
    {
       if (isalpha(c)
           alp++;
       else if (isdigit(c))
           dig++;
    }

    printf("The number of letters is %d and the number of digits is %d.\n", alp,dig);

PS:如果输入中有
\n
,请注意刷新换行符,例如通过递归调用

//gcc -O2 count_alpha_num.c -o count_alpha_num
#include <stdio.h>
#include <ctype.h>

void count_alpha_num(FILE *fp, int *alpha, int *num){
    int ch;
    if(EOF==(ch=fgetc(fp)))
        return ;
    if(isalpha(ch))
        ++*alpha;
    else if(isdigit(ch))
        ++*num;
    count_alpha_num(fp, alpha, num);
}

int main(void){
    int a_c = 0, n_c = 0;
    count_alpha_num(stdin, &a_c, &n_c);
    printf("The number of letters is %d and the number of digits is %d.\n", a_c, n_c);
    return 0;
}
//gcc-O2计数\u alpha\u num.c-o计数\u alpha\u num
#包括
#包括
无效计数\u alpha\u num(文件*fp,int*alpha,int*num){
int-ch;
如果(EOF==(ch=fgetc(fp)))
返回;
if(艾萨帕(ch))
++*阿尔法;
否则,如果(isdigit(ch))
++*num;
计数α数(fp,alpha,num);
}
内部主(空){
int a_c=0,n_c=0;
计数α数(标准、a、c和n);
printf(“字母数为%d,位数为%d.\n”,a_c,n_c);
返回0;
}

相互递归的示例

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

void count_num(int loaded, int ch, int *alpha, int *num);
void count_alpha(int loaded, int ch, int *alpha, int *num){
    if(ch==EOF)
        return ;
    if(isalpha(ch)){
        ++*alpha;
        count_alpha(0, getchar(), alpha, num);
    } else {
        if(loaded)//Already been inspected by 'count_num'
            count_num(0, getchar(), alpha, num);
        else
            count_num(1, ch, alpha, num);
    }
}
void count_num(int loaded, int ch, int *alpha, int *num){
    if(ch==EOF)
        return ;
    if(isdigit(ch)){
        ++*num;
        count_num(0, getchar(), alpha, num);
    } else {
        if(loaded)
            count_alpha(0, getchar(), alpha, num);
        else
            count_alpha(1, ch, alpha, num);
    }
}

int main(void){
    int a_c = 0, n_c = 0;
    count_alpha(0, getchar(), &a_c, &n_c);
    printf("The number of letters is %d and the number of digits is %d.\n", a_c, n_c);
    return 0;
}
#包括
#包括
void count_num(加载的int、ch的int、alpha的int*alpha、num的int*num);
void count_alpha(int-loaded,int-ch,int*alpha,int*num){
如果(ch==EOF)
返回;
if(艾萨帕(ch)){
++*阿尔法;
count_alpha(0,getchar(),alpha,num);
}否则{
如果(已加载)//已由“count\u num”检查
count_num(0,getchar(),alpha,num);
其他的
计数(1,ch,alpha,num);
}
}
无效计数_num(加载的整数、整数、整数*α、整数*num){
如果(ch==EOF)
返回;
if(isdigit(ch)){
++*num;
count_num(0,getchar(),alpha,num);
}否则{
如果(已加载)
count_alpha(0,getchar(),alpha,num);
其他的
计数α(1,ch,alpha,num);
}
}
内部主(空){
int a_c=0,n_c=0;
计数α(0,getchar(),&a\u c,&n\u c);
printf(“字母数为%d,位数为%d.\n”,a_c,n_c);
返回0;
}

递归调用的示例

//gcc -O2 count_alpha_num.c -o count_alpha_num
#include <stdio.h>
#include <ctype.h>

void count_alpha_num(FILE *fp, int *alpha, int *num){
    int ch;
    if(EOF==(ch=fgetc(fp)))
        return ;
    if(isalpha(ch))
        ++*alpha;
    else if(isdigit(ch))
        ++*num;
    count_alpha_num(fp, alpha, num);
}

int main(void){
    int a_c = 0, n_c = 0;
    count_alpha_num(stdin, &a_c, &n_c);
    printf("The number of letters is %d and the number of digits is %d.\n", a_c, n_c);
    return 0;
}
//gcc-O2计数\u alpha\u num.c-o计数\u alpha\u num
#包括
#包括
无效计数\u alpha\u num(文件*fp,int*alpha,int*num){
int-ch;
如果(EOF==(ch=fgetc(fp)))
返回;
if(艾萨帕(ch))
++*阿尔法;
否则,如果(isdigit(ch))
++*num;
计数α数(fp,alpha,num);
}
内部主(空){
int a_c=0,n_c=0;
计数α数(标准、a、c和n);
printf(“字母数为%d,位数为%d.\n”,a_c,n_c);
返回0;
}

相互递归的示例

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

void count_num(int loaded, int ch, int *alpha, int *num);
void count_alpha(int loaded, int ch, int *alpha, int *num){
    if(ch==EOF)
        return ;
    if(isalpha(ch)){
        ++*alpha;
        count_alpha(0, getchar(), alpha, num);
    } else {
        if(loaded)//Already been inspected by 'count_num'
            count_num(0, getchar(), alpha, num);
        else
            count_num(1, ch, alpha, num);
    }
}
void count_num(int loaded, int ch, int *alpha, int *num){
    if(ch==EOF)
        return ;
    if(isdigit(ch)){
        ++*num;
        count_num(0, getchar(), alpha, num);
    } else {
        if(loaded)
            count_alpha(0, getchar(), alpha, num);
        else
            count_alpha(1, ch, alpha, num);
    }
}

int main(void){
    int a_c = 0, n_c = 0;
    count_alpha(0, getchar(), &a_c, &n_c);
    printf("The number of letters is %d and the number of digits is %d.\n", a_c, n_c);
    return 0;
}
#包括
#包括
void count_num(加载的int、ch的int、alpha的int*alpha、num的int*num);
void count_alpha(int-loaded,int-ch,int*alpha,int*num){
如果(ch==EOF)
返回;
if(艾萨帕(ch)){
++*阿尔法;
count_alpha(0,getchar(),alpha,num);
}否则{
如果(已加载)//已由“count\u num”检查
count_num(0,getchar(),alpha,num);
其他的
计数(1,ch,alpha,num);
}
}
无效计数_num(加载的整数、整数、整数*α、整数*num){
如果(ch==EOF)
返回;
if(isdigit(ch)){
++*num;
count_num(0,getchar(),alpha,num);
}否则{
如果(已加载)
count_alpha(0,getchar(),alpha,num);
其他的
计数α(1,ch,alpha,num);
}
}
内部主(空){
int a_c=0,n_c=0;
计数α(0,getchar(),&a\u c,&n\u c);
printf(“字母数为%d,位数为%d.\n”,a_c,n_c);
返回0;
}

递归调用的示例

//gcc -O2 count_alpha_num.c -o count_alpha_num
#include <stdio.h>
#include <ctype.h>

void count_alpha_num(FILE *fp, int *alpha, int *num){
    int ch;
    if(EOF==(ch=fgetc(fp)))
        return ;
    if(isalpha(ch))
        ++*alpha;
    else if(isdigit(ch))
        ++*num;
    count_alpha_num(fp, alpha, num);
}

int main(void){
    int a_c = 0, n_c = 0;
    count_alpha_num(stdin, &a_c, &n_c);
    printf("The number of letters is %d and the number of digits is %d.\n", a_c, n_c);
    return 0;
}
//gcc-O2计数\u alpha\u num.c-o计数\u alpha\u num
#包括
#包括
无效计数\u alpha\u num(文件*fp,int*alpha,int*num){
int-ch;
如果(EOF==(ch=fgetc(fp)))
返回;
if(艾萨帕(ch))
++*阿尔法;
否则,如果(isdigit(ch))
++*num;
计数α数(fp,alpha,num);
}
内部主(空){
int a_c=0,n_c=0;
计数α数(标准、a、c和n);
printf(“字母数为%d,位数为%d.\n”,a_c,n_c);
返回0;
}

相互递归的示例

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

void count_num(int loaded, int ch, int *alpha, int *num);
void count_alpha(int loaded, int ch, int *alpha, int *num){
    if(ch==EOF)
        return ;
    if(isalpha(ch)){
        ++*alpha;
        count_alpha(0, getchar(), alpha, num);
    } else {
        if(loaded)//Already been inspected by 'count_num'
            count_num(0, getchar(), alpha, num);
        else
            count_num(1, ch, alpha, num);
    }
}
void count_num(int loaded, int ch, int *alpha, int *num){
    if(ch==EOF)
        return ;
    if(isdigit(ch)){
        ++*num;
        count_num(0, getchar(), alpha, num);
    } else {
        if(loaded)
            count_alpha(0, getchar(), alpha, num);
        else
            count_alpha(1, ch, alpha, num);
    }
}

int main(void){
    int a_c = 0, n_c = 0;
    count_alpha(0, getchar(), &a_c, &n_c);
    printf("The number of letters is %d and the number of digits is %d.\n", a_c, n_c);
    return 0;
}
#包括
#包括
void count_num(加载的int、ch的int、alpha的int*alpha、num的int*num);
void count_alpha(int-loaded,int-ch,int*alpha,int*num){
如果(ch==EOF)
返回;
if(艾萨帕(ch)){
++*阿尔法;
count_alpha(0,getchar(),alpha,num);
}否则{
如果(已加载)//已由“count\u num”检查
count_num(0,getchar(),alpha,num);
其他的
计数(1,ch,alpha,num);
}
}
无效计数_num(加载的整数、整数、整数*α、整数*num){
如果(ch==EOF)
返回;
if(isdigit(ch)){
++*num;
count_num(0,getchar(),alpha,num);
}否则{
如果(已加载)
计数α(0,getchar(),α,num