【问题标题】:C function input string and calculationC函数输入字符串和计算
【发布时间】:2020-01-29 19:18:49
【问题描述】:
    #include <stdio.h>
    #include <string.h>
    #define SIZE 30
    int countWord(int a[]);
    int countSpace(int a[]);
    int countVowel(int a[]);
    int printResult(int a[]);

int main()//starting main 
{
    char string1[SIZE];
    printf("%s","Enter a string less than 29 characters");
    scanf("%29[^\n]",string1);  //anything except \n.

    printResult(string1);
}
int countWord(int a[]){
    int count=1;
    for(size_t i=0;i<SIZE&&a[i]!='\0';++i){ 
        if(a[i]==' '){
            count++;
        }
    }
    return count;
}
int countSpace(int a[]){
    int count1=0;
    for(size_t i=0;i<SIZE&&a[i]!='\0';++i){ 
        if(a[i]==' '){
            count1++;
        }
    }
    return count1;
}
int countVowel(int a[]){
    int count2=0;
     for(size_t i=0;i<SIZE&&a[i]!='\0';++i){
         if(strchr("aeiouAEIOU", a[i])){
            count2++;
        }
     }
     return count2;
}
int countNum(int a[]){
    int count3=countWord(a)-countVowel(a)-countSpace(a);
    return count3;
}
int printResult(int a[]){
    printf("Your sentence include\n");
    printf("Number of words:%d\n",countWord(a));
    printf("Number of spaces:%d\n",countSpace(a));
    printf("Number of vowels:%d\n",countVowel(a));
    printf("Number of consonants and special characters:%d\n",countNum(a));
}

这个程序是关于要求用户输入一个字符串并计算有多少单词,空格,元音......但是输入一个字符串后我得到了非常错误的结果。我认为逻辑很好,并且正在努力在这里找到任何问题

【问题讨论】:

  • 你能扩展你的错误结果吗?
  • @EricXu 为什么函数处理整数数组?:)
  • 输入一个少于 29 个字符的字符串我的猫是贝拉 你的句子包括 字数:1 空格数:0 元音数:1 辅音和特殊字符数:0 这就是我得到的,输入在:我的猫是贝拉
  • @VladfromMoscow 哦,是的,我应该输入 char 字符串
  • 您还记得您为得到非常错误的结果而输入的输入字符串是什么吗?

标签: c arrays string function


【解决方案1】:

在这里努力寻找任何问题

节省时间,启用所有警告。这是关键错误。

评论类型。

int printResult(int a[]);

  char string1[SIZE]; 
  printResult(string1);

" "" abc def "" abcd" 的字数统计错误。

替代方案:为单词的开头设置一个标志。

int countWord(int a[]){
int countWord(const int_but_I_suspect_you_want *a) {
  int count=0;
  int start_of_word_possible = 1;
  while (*a) {
    if (isspace(*a)) {
      start_of_word_possible = 1;
    } else {
      if (start_of_word) count++;
      start_of_word_possible = 0;
    }
    a++;
  }
  return count;
}

【讨论】:

    【解决方案2】:

    在不知道你输入的原始字符串的情况下,不可能知道你看到了什么意想不到的结果,但这里有一些一般性的建议:

    • 由于您使用的是字符串,因此在您的所有函数原型和函数中将int a[] 替换为const char *a 会更加惯用。
    • main 中的scanf 调用后评论短语anything except \n.
    • 如果您不打算在int printResult(const char *a 中返回值,请将其设为void printResult(const char *a
    • main 的最小签名是int main(void){...return 0;}

    仅通过这些更改,并在输入 This is a string 后,我得到以下结果:

    字数:4
    空格数:3
    元音数:4
    数量 辅音和特殊字符:-3

    因为 4 - 3 - 4 == -3,看来所有值都计算正确。

    根据上面我的 cmets 更新代码:

    int main(void)//starting main 
    {
        char string1[SIZE];
        printf("%s","Enter a string less than 29 characters");
        scanf("%29[^\n]",string1);//anything except \n.
    
        printResult(string1);
    
        return 0;
    }
    int countWord(const char *a){
        int count=1;
        for(size_t i=0;i<SIZE&&a[i]!='\0';++i){ 
            if(a[i]==' '){
                count++;
            }
        }
        return count;
    }
    int countSpace(const char *a){
        int count1=0;
        for(size_t i=0;i<SIZE&&a[i]!='\0';++i){ 
            if(a[i]==' '){
                count1++;
            }
        }
        return count1;
    }
    int countVowel(const char *a){
        int count2=0;
         for(size_t i=0;i<SIZE&&a[i]!='\0';++i){
             if(strchr("aeiouAEIOU", a[i])){
                count2++;
            }
         }
         return count2;
    }
    int countNum(const char *a){
        int count3=countWord(a)-countVowel(a)-countSpace(a);
        return count3;
    }
    void printResult(const char *a){
        printf("Your sentence include\n");
        printf("Number of words:%d\n",countWord(a));
        printf("Number of spaces:%d\n",countSpace(a));
        printf("Number of vowels:%d\n",countVowel(a));
        printf("Number of consonants and special characters:%d\n",countNum(a));
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-05
      • 2021-08-13
      • 2021-10-07
      相关资源
      最近更新 更多