【问题标题】:Program keeps printing a zero byte?程序一直打印一个零字节?
【发布时间】:2019-10-29 05:19:03
【问题描述】:

我正在尝试创建一个从句子中删除元音的程序。但是,我的程序一直失败,因为它一直在字符串中打印零字节。谁能告诉我我哪里出错了?

#include <stdio.h>

int remove_all_vowels(int character);

int main(void) {

int character = getchar();
while (character != EOF && character != '\0') {

int new_character = remove_all_vowels(character);
putchar(new_character);

character = getchar();
}


return 0;

}

int remove_all_vowels(int character) {
if (character == 'a' || character == 'e' || character == 'i' || character 
== 'o' || character == 'u') {
return 0;
} else {
return character;
}

}

【问题讨论】:

    标签: c getchar putchar


    【解决方案1】:

    您的问题(输出空字符)来自于您无条件地 putchar(3) remove_all_vowels 的结果,当给定字符是元音时,它返回 0(空字符)。

    用空格替换元音:

    您可以简单地将 remove_all_vowels 中的 return 0; 更改为 return ' ';

    彻底删除元音:

    我建议使用一个函数来帮助您检查元音,而不是让它像一个字符的转换一样,这真的是最pythonest。

    代码示例:

    int is_vowel(int character) {
        return (
               character == 'a' || character == 'e' || character == 'i'
            || character == 'o' || character == 'u'
        );
    }
    
    // Then, in your main...
    ...
    if (!is_vowel(character))
        putchar(character);
    

    【讨论】:

      【解决方案2】:

      您的程序在这里运行良好 https://www.onlinegdb.com/online_c_compiler

      可以截图你的编译器有什么问题吗?

          #include <stdio.h>
      #include <string.h>
      
      int check_vowel(char);
      
      int main()
      {
        char s[100], t[100];
        int c, d = 0;
      
        printf("Enter a string to delete vowels\n");
        gets(s);
      
        for(c = 0; s[c] != '\0'; c++) {
          if(check_vowel(s[c]) == 0) {       // If not a vowel
            t[d] = s[c];
            d++;
          }
        }
      
        t[d] = '\0';
      
        strcpy(s, t);  // We are changing initial string. This is optional.
      
        printf("String after deleting vowels: %s\n", s);
      
        return 0;
      }
      
      int check_vowel(char ch)
      {
          if (ch == 'a' || ch == 'A' || ch == 'e' || ch == 'E' || ch == 'i' || ch == 'I' || ch =='o' || ch=='O' || ch == 'u' || ch == 'U')
            return 1;
          else
            return 0;
      }
      

      【讨论】:

      • 虽然它能够运行,但我的程序的问题是它打印零字节或空终止符。你知道如何防止零字节被打印吗?
      猜你喜欢
      • 1970-01-01
      • 2012-06-17
      • 1970-01-01
      • 1970-01-01
      • 2021-04-09
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多