计算C语言中的句子数

计算C语言中的句子数,c,C,这个简单的代码通过检查句号、问号或感叹号来计算输入的句子数。但是,如果我输入“”,则不计算空格后的句子。 我怎样才能解决这个问题 int numberSentence(char ch[]) { int count=0, i=0; while(ch[i] != '\0') { if(ch[i] == '.' || ch[i] == '?' || ch[i] == '!') count++; i++; }

这个简单的代码通过检查句号、问号或感叹号来计算输入的句子数。但是,如果我输入“”,则不计算空格后的句子。 我怎样才能解决这个问题

int numberSentence(char ch[])
{
    int count=0, i=0;
    while(ch[i] != '\0')
    {
        if(ch[i] == '.' || ch[i] == '?' || ch[i] == '!')
            count++;
        i++;
    }

    return count;
}


int main()
{
    char ch[999];
    printf("Enter sentences:\n");
    scanf("%s", ch);
    printf("Number of sentences is %d", numberSentence(ch));

}

如果“空白”是指新行键,请尝试:

if(ch[i] == '.' || ch[i] == '?' || ch[i] == '!' || ch[i] == '\n')
        count++;
但是为什么不直接使用get()呢


如果“空白”是指新行键,请尝试:

if(ch[i] == '.' || ch[i] == '?' || ch[i] == '!' || ch[i] == '\n')
        count++;
但是为什么不直接使用get()呢

你的问题在于:

scanf("%s", ch)
带有“%s”的scanf将查找,直到找到空白,然后将字符串存储到指针ch中

在这种情况下,我建议使用:

scanf("%c", ch)
它将逐字扫描。您将需要稍微修改程序

请注意,scanf()将返回一个整数,表示读取内容的宽度。 因此:

供参考: 您的问题在于:

scanf("%s", ch)
带有“%s”的scanf将查找,直到找到空白,然后将字符串存储到指针ch中

在这种情况下,我建议使用:

scanf("%c", ch)
它将逐字扫描。您将需要稍微修改程序

请注意,scanf()将返回一个整数,表示读取内容的宽度。 因此:

供参考:

对于这个简单的问题,您可以让
scanf()
使用scanset转换说明符在句子分隔符上拆分输入

#include <stdio.h>

int main(void) {
    int count = 0;
    char buf[1000];
    while (scanf("%999[^.!?]%*c", buf) == 1) ++count;
    printf("sentences: %d\n", count);
    return 0;
}
#包括
内部主(空){
整数计数=0;
char-buf[1000];
而(scanf(“%999[^.!?]%*c”,buf)==1)++计数;
printf(“句子:%d\n”,计数);
返回0;
}

%[^.!?]
将扫描所有数据,最多扫描一个句点、感叹号或问号。
%*c
将扫描标点符号而不存储它(
*
意味着没有参数可以将扫描的输入存储到中)。

对于这个简单的问题,您可以让
scanf()
使用扫描集转换说明符分割句子定界符上的输入

#include <stdio.h>

int main(void) {
    int count = 0;
    char buf[1000];
    while (scanf("%999[^.!?]%*c", buf) == 1) ++count;
    printf("sentences: %d\n", count);
    return 0;
}
#包括
内部主(空){
整数计数=0;
char-buf[1000];
而(scanf(“%999[^.!?]%*c”,buf)==1)++计数;
printf(“句子:%d\n”,计数);
返回0;
}
%[^.!?]
将扫描所有数据,最多扫描一个句点、感叹号或问号。
%*c
将在不存储标点符号的情况下扫描标点符号(
*
意味着扫描的输入不需要存储到任何参数中)。

\include
整数内容(字符ch[]{
int计数=0,i;
char last='';
对于(i=0;ch[i];++i){
如果(ch[i]='.| | ch[i]='?'| | ch[i]='!')){
计数++;
最后=“”;
}else if(ch[i]=''| | ch[i]='\t'| | ch[i]='\n'){
continue;//空格不包括到顶部的句子。
}否则{
last=ch[i];//检查是否以“?”结尾
}
}
返回计数+(last!='');//+(last!=''):+1如果不是以“?”结尾
}
内部主(空){
char-ch[1000];
printf(“输入句子:\n”);
scanf(“%999[^\n]”,ch);//输入到换行符
printf(“句子数为%d”,numbercontence(ch));
}
#包括
整数内容(字符ch[]{
int计数=0,i;
char last='';
对于(i=0;ch[i];++i){
如果(ch[i]='.| | ch[i]='?'| | ch[i]='!')){
计数++;
最后=“”;
}else if(ch[i]=''| | ch[i]='\t'| | ch[i]='\n'){
continue;//空格不包括到顶部的句子。
}否则{
last=ch[i];//检查是否以“?”结尾
}
}
返回计数+(last!='');//+(last!=''):+1如果不是以“?”结尾
}
内部主(空){
char-ch[1000];
printf(“输入句子:\n”);
scanf(“%999[^\n]”,ch);//输入到换行符
printf(“句子数为%d”,numbercontence(ch));
}

空白,如您键入字母
b
l
a
,或您点击空格键?是否包括您的空白
'\t'
'
'\n'
'\r'
?请更明确一点。添加换行:
printf(“句子数为%d\n”,numbercontent(ch))对不起,是的,我指的是空格,因为你键入了字母
b
l
a
,或者你点击了空格键?你的空格是否包括
'\t'
'
'
'\n'
或者
'\r'
?请再加一句新行:
printf(“句子数是%d\n”,数字强度(ch)对不起,是的,我指的是空格键
scanf(“%s”,ch)不包括空格。@Dr.Haimovitz请参见^。
scanf(“%s”,ch)不包括空格。@Dr.Haimovitz请参见^^。