这个简单的代码计算通过检查期间,问号或感叹号输入的句子数。但是,如果我输入" ",它不计算空格后的句子。 我该如何解决这个问题?
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));
}
答案 0 :(得分:2)
你的问题在于:
scanf("%s", ch)
scanf with“%s”将查找,直到找到一个空格,然后将该字符串存储到指针ch中。
在这种情况下,我建议使用:
scanf("%c", ch)
它将逐个字符地扫描。您需要稍微改造程序。
请注意,scanf()将返回一个表示其读取宽度的整数。 因此:
while(scanf("%c", ch) == 1)
if (ch == ...)
}
供您参考: http://www.tutorialspoint.com/c_standard_library/c_function_scanf.htm
答案 1 :(得分:1)
如果用空白表示换行符号,请尝试:
if(ch[i] == '.' || ch[i] == '?' || ch[i] == '!' || ch[i] == '\n')
count++;
但为什么不使用gets()呢?
while(gets(ch)!=NULL)
{
count++;
}
答案 2 :(得分:0)
对于这个简单的问题,您可以使用 scanset 转换说明符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;
}
%[^.!?]
会将所有数据扫描到句号,感叹号或问号。 %*c
将扫描标点符号而不存储它(*
表示没有存储扫描输入的参数。)
答案 3 :(得分:0)
#include <stdio.h>
int numberSentence(char ch[]){
int count=0, i;
char last = ' ';
for(i = 0; ch[i]; ++i){
if(ch[i] == '.' || ch[i] == '?' || ch[i] == '!'){
count++;
last = ' ';
} else if(ch[i] == ' ' || ch[i] == '\t' || ch[i] == '\n'){
continue;//white-space does't include to sentence of top.
} else {
last = ch[i];//check for Not terminated with ".?!"
}
}
return count + (last != ' ');//+ (last != ' ') : +1 if Not terminated with ".?!"
}
int main(void){
char ch[1000];
printf("Enter sentences:\n");
scanf("%999[^\n]", ch);//input upto newline
printf("Number of sentences is %d", numberSentence(ch));
}