使用c ++

时间:2015-10-07 19:41:19

标签: c++ file pointers

您好我的程序收到了用户提供的文字字符串并执行了3项操作:

  1. 将所有元音转换为大写字母,打印新文本并打印转换元音的数量。
  2. 将新文本保存到文件中。
  3. 按字符打印转换后的文字字符。
  4. 继承代码

    #include <stdio.h>
    void convert(char *ptrQuote[80], int nvocals);
    void save(char *ptrQuote[80]);
    void print(char *ptrQuote[80]);
    
    int main(int argc, char** argv) {
    
        char  quote[80];
        char *ptrQuote[80];
        int nvocals= 0;
        printf("Enter your quote :\n");
        scanf("%s", &quote);
        for(int i= 0; i<80; i++)
        {
            ptrQuote[i]= &quote[i];
        }
        convert(ptrQuote, nvocals);
        save(ptrQuote);
        print(ptrQuote);
        return 0;
    }
    
    void convert(char *ptrQuote[80], int nvocals)
    {
        for(int i=0; i<80; i++)
        {
            if(*ptrQuote[i]=='a')
            {
                *ptrQuote[i]='A';
                nvocals ++;
            }
    
            if(*ptrQuote[i]=='e')
            {
                *ptrQuote[i]='E';
                nvocals ++;
            }
    
            if(*ptrQuote[i]=='i')
            {
                *ptrQuote[i]='I';
                nvocals ++;
            }
    
            if(*ptrQuote[i]=='o')
            {
                *ptrQuote[i]='O';
                nvocals ++;
            }
    
            if(*ptrQuote[i]=='u')
            {
                *ptrQuote[i]='U';
                nvocals ++;
            }
    
        }
    
        printf("%s\n", *ptrQuote);
        printf("Number of vocals: %d\n", nvocals);
    }
    
    void save(char *ptrQuote[80])
    {
        FILE *quote;
        quote= fopen("quote.txt", "w");
        fwrite(&ptrQuote[80], sizeof(*ptrQuote), 1, quote);
        fclose(quote);
    }
    
    void print(char *ptrQuote[80])
    {
        for(int i=0; i<sizeof(*ptrQuote); i++)
        {
            printf("%c", *ptrQuote[i]);
        }
    }
    

    第一个功能正常工作但是当涉及到保存和打印功能时,它会保存并打印不完整的报价。正如你所看到的,我正在使用指针。我能做什么?感谢。

1 个答案:

答案 0 :(得分:1)

你很亲密。而不是使用80指针(可能是舷外)代码,只需使用一个:

#include <stdio.h>
void convert(char ptrQuote[80], int nvocals);
void save(char ptrQuote[80]);
void print(char ptrQuote[80]);

int main(int argc, char **argv) {
    char  quote[80];
    int nvocals = 0;
    printf("Enter your quote :\n");
    scanf("%s", &quote);
    convert(quote, nvocals);
    save(quote);
    print(quote);
    return 0;
}

void convert(char ptrQuote[80], int nvocals)
{
    for(int i=0; i<80; i++)
    {
        if(ptrQuote[i]=='a')
        {
            ptrQuote[i]='A';
            nvocals ++;
        }

        if(ptrQuote[i]=='e')
        {
            ptrQuote[i]='E';
            nvocals ++;
        }

        if(ptrQuote[i]=='i')
        {
            ptrQuote[i]='I';
            nvocals ++;
        }

        if(ptrQuote[i]=='o')
        {
            ptrQuote[i]='O';
            nvocals ++;
        }

        if(ptrQuote[i]=='u')
        {
            ptrQuote[i]='U';
            nvocals ++;
        }

    }

    printf("%s\n", ptrQuote);
    printf("Number of vocals: %d\n", nvocals);
}

void save(char ptrQuote[80])
{
    FILE *quote;
    quote = fopen("quote.txt", "w");
    fwrite(ptrQuote, sizeof(*ptrQuote), 1, quote);
    fclose(quote);
}

void print(char ptrQuote[80])
{
    /* no need for loop here anymore */
    printf("%s\n", ptrQuote);
}

您还可以使用以下方法打印到文件(使用您的方法):

for (int i = 0; i < 80; ++i)
    fputc(*ptrQuote[i], quote);