2015-10-07 3 views
0

Привет У меня возникли проблемы с программой, которая получает текстовую строку, предоставленную пользователем, и делает 3 вещи:сохранение указателя обугленного на файл с C++

  1. Преобразовать все гласные заглавных букв, напечатать новый текст, а также распечатать количество преобразованных гласных.
  2. Сохраните новый текст в файл.
  3. Печатать текст преобразованного текста по символу.

Heres код

#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

В этой программе буквально нет кода на C++. Может ли это быть повторно помечено как C или вы намерены делать C++? – tadman

+1

вы можете перестать работать с указателями и использовать строки вместо – user463035818

+0

Я не понимаю цели 'ptrQuote'. Кажется, это просто указывает на каждый отдельный персонаж. –

ответ

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); 
+0

Нужно обновить эти прототипы вперед. – user4581301

+0

@ user4581301 - Исправлено. ;-) – owacoder

Смежные вопросы