c - C程序空白输出问题

标签 c

int i=0,j=0;

char string[100], string2[100];
scanf("%s",&string);

while (string[i]!='\0'){
    if(string[i]=='a' || string[i]=='e' || string[i]=='i' || string[i]=='o' || string[i]=='u' || string[i]=='A' || string[i]=='E' || string[i]=='I' || string[i]=='O' || string[i]=='U'){
        string[i]=string2[j];
    }
    string[i] = tolower(string[i]);
    string[i] = string2[j];
    string2[j-1]='.';
}
printf("%s", string2);

return 0;

问题是输入一个单词,然后删除所有元音,添加“.”在每个常量之后并将所有大写字母变为小写。

最佳答案

由于 string 是一个数组,因此在将其传递给 scanf() 时不使用 & ,这给你一个双指针并且是一个错误。每当您发现自己有 10 个子句 if 语句时,您只是在自问问题(例如,很容易被拼写错误绊倒。)您可以使用 index()< 简化此测试 和包含所有元音的字符串。在编写代码时添加注释以指示每个部分实现哪些要求不会有什么坏处。每次循环时,i 变量都需要递增,每次向 string2 添加新字符时,j 变量都需要递增。在 scanf() 之后,您不应该分配给 string,将其视为只读,仅分配给 string2. j-1 不应该发生。最后,由于 string2 未初始化,因此其中可能存在垃圾,并且您尚未将其 null 终止。把它们放在一起:

#include <ctype.h>
#include <stdio.h>
#include <strings.h>

#define VOWELS "AEIOUaeiou"

int main()
{
    char string[100], new_string[100] = { 0 };

    // enter a word
    scanf("%s", string);

    for (int i = 0, j = 0; string[i] != '\0'; i++)
    {
        // remove all vowels
        if (index(VOWELS, string[i]) == NULL)
        {
            // make all upper case letters lower case
            new_string[j++] = tolower(string[i]);

            if (isalpha(string[i]))
            {
                new_string[j++] = '.'; // add '.' after every consonant
            }
        }
    }

    printf("%s\n", new_string);

    return 0;
}

我假设“在每个常量之后”的意思是“在每个辅音之后”,否则请澄清您所说的“常量”的含义。

关于c - C程序空白输出问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38173209/

相关文章:

简而言之结合 MSB 和 LSB

c - 反转数组而不使用第二个数组。 (C语言)

c - 如何找到作为参数传递给 c 的整数数组的长度?

c - 是否存在短裤大小实际大于 16 位的平台

c - fprintf 有问题

c - 返回错误值的方法

c - g_object_new 应该有匹配的 g_object_unref 吗?

c - c中write函数的问题

c - 语法错误: 'constant' while using flex

c++ - 1字节!= 8位的系统?