求求大神看看这个程序问题在哪

qq_33385578 2018-03-11 09:42:34
#include<stdio.h>
#include<string.h>
#define max 100
void main()
{
char a[max];
int i,j,k,len;
printf("请输入一个英文句子:");
scanf("%s",a);
len=strlen(a);
for(i=0;i<len;i++)
{
if((a[i]>'A'&&a[i]<'Z')||(a[i]>'a'&&a[i]<'z'))
j++;
if(a[i]==' ')
k++;
}
k++;
printf("英文句子的字母个数为%d个",j);
printf("英文句子的单词个数为%d个",k);
}
...全文
815 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-03-15
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<string.h>
#include<locale.h>

#define max 100

int main() {
    char a[max];
    int i,j,k,len,f;

    setlocale(LC_ALL,"chs");
    printf("请输入一个英文句子:");
    fgets(a,max,stdin);
    if ('\n'==a[strlen(a)-1]) a[strlen(a)-1]=0;
    len = strlen(a);
    j=k=f=0;
    for (i=0;i<len;i++) {
        if (('A'<=a[i] && a[i] <= 'Z')
          ||('a'<=a[i] && a[i] <= 'z')) {
            j++;
            f=1;
        } else {
            if (f==1) {
                k++;
                f=0;
            }
        }
    }
    if (f==1) k++;
    printf("英文句子的字母个数为%d个\n", j);
    printf("英文句子的单词个数为%d个\n", k);
    return 0;
}
//请输入一个英文句子:_I'm sorry!  Very very sorry!!_
//英文句子的字母个数为20个
//英文句子的单词个数为6个
//
MeanTuple 2018-03-15
  • 打赏
  • 举报
回复
引用 6 楼 自信男孩的回复:
[quote=引用 5 楼 withraohu 的回复:] scanf的a不是要加&咩?
不能加&;加了就会有问题了。[/quote] 我是小白,勿怪
自信男孩 2018-03-15
  • 打赏
  • 举报
回复
引用 5 楼 withraohu 的回复:
scanf的a不是要加&咩?
不能加&;加了就会有问题了。
weixin_41842829 2018-03-15
  • 打赏
  • 举报
回复
#include <stdio.h> #include <string.h> #include <ctype.h> #include <stdlib.h> #define max 100 int main() { char a[max],*p=NULL; int chcnt=0, k=0, len; printf ( "请输入一个英文句子:\n" ); // scanf ( "%s", a ); 碰到空白会截断 fgets(a,max,stdin); len = strlen ( a ); for ( int i = 0; i != len; i++ ) { if ( isalnum ( a[i] ) ) chcnt++; } p=strtok(a," "); while(p) { k++; p=strtok(NULL," "); } printf ( "英文句子的字母个数为%d个\n", chcnt ); printf ( "英文句子的单词个数为%d个\n", k ); return 0; }
星星点大灯 2018-03-12
  • 打赏
  • 举报
回复
还有 j 和 k都没初始化吧
自信男孩 2018-03-12
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<string.h>

#define max 100

int  main()
{
    char a[max];
    int i,j,k,len;

    printf("请输入一个英文句子:");
    fgets(a, max, stdin);
    len = strlen(a);
    for(i=0;i<len;i++)
    {
        if((a[i]>= 'A' && a[i] <= 'Z')||(a[i] >= 'a' && a[i] <= 'z'))
            j++;
        if(a[i] == ' ')
            k++;
    }
    k++;
    printf("英文句子的字母个数为%d个\n", j);
    printf("英文句子的单词个数为%d个\n", k);
}
参考一下吧; 第一个问题:不能使用scanf输入一个带有空格的英文句子,因为scanf是格式化输入,遇到空格表示一个格式的输入结束,因此放在a中的单词不会存在空格。 建议改成fgets或者其他能够输入一行的函数。 第二个问题:统计字母时,缺少了边界,比如‘a', 'A', ’z', 'Z' 建议使用库函数isalpha(a[i]);判断字母
mstlq 2018-03-11
  • 打赏
  • 举报
回复
if((a[i]>'A'&&a[i]<'Z')||(a[i]>'a'&&a[i]<'z'))
if((a[i]>='A'&&a[i]<='Z')||(a[i]>='a'&&a[i]<='z'))
还有if(a[i]==' ')应该是if(a[i]==' '),注意空格,并且要注意首个单词前面的空格不能将k自增,如果前面一个已经是空格,那么当前是空格也不能给k自增
FoolCarpe 2018-03-11
  • 打赏
  • 举报
回复
<= >=

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧