2014-09-05 3 views
0

Его код для преобразования строчных символов в векторе в верхний регистр. Im получает ошибку в строках 21,23,24,26,29. Im новичок программирует в C. Пожалуйста, помогите мне.Строки 21,23,24,26,29 подстрочное значение не является ни массивом, ни указателем, ни вектором

int main() 
{ 
    char orig[30]; 
    char dest[30]; 

    printf("Write a string :"); 
     scanf("%s",orig); 

     char uppercase(dest,orig); 
     printf("uppercase string = ",dest); 


} 



char uppercase(char destination,char origin){ 

    int i = 0; 

     while(origin[i]!='\0'){ 

     if(origin[i]>='a'&& origin[i]<='z'){ 
      destination[i]= origin[i] +'A'-'a'; 
     } 
     else destination[i]=origin[i]; 
       i++; 
     } 
    destination[i]='\0'; 

return destination; 

} 

ответ

0

Хорошо, так что вы, возможно, придется немного бардак там ^^

Хотя общая идея верна, ваш метод вызова не работает.

Попробуйте что-то вроде этого

int main() 
{ 
    char orig[30]; 
    char dest[30]; 

    printf("Write a string :"); 
    scanf("%s",orig); 

    dest = uppercase(orig); 
    printf("uppercase string = ",dest); 


} 



char[] uppercase(char origin){ 
    char destination[30]; 
    int i = 0; 

     while(origin[i]!='\0'){ 

     if(origin[i]>='a'&& origin[i]<='z'){ 
      destination[i]= origin[i] +'A'-'a'; 
     } 
     else destination[i]=origin[i]; 
       i++; 
     } 
    destination[i]='\0'; 

return destination; 

} 

хотя может быть еще больше проблем, но я не уверен, на каком языке вы программируете в, так что я не могу помочь вам с этим.

+0

Благодаря программирования lot.Im в C. – Fran

0

Есть несколько проблем здесь:

  1. Вы не объявить прописную функции, прежде чем использовать его. В то время как старые стандарты C допускают неявные объявления функций, это не работает так, как вы этого хотите. Для получения дополнительной информации см .: Implicit function declarations in C
  2. У вас есть несоответствия типа в вашей сигнатуре функции. Вы должны передать массив символов либо как char *, либо как char [], а не как обычный char. То же самое для типа возврата.
  3. Не совсем ошибка, но неплохо использовать fgets вместо scanf для ввода строк, так как вы можете защитить от проблем с переполнением буфера. Смотрите это тоже: https://stackoverflow.com/a/1248017/2327880

Это должно работать:

#include <stdio.h> 
#include <string.h> 

// uppercase function declaration 
char * uppercase(char *, char *); 

int main() { 

    char orig[31]; 
    char dest[31]; 

    printf("Write a string : "); 

    // use fgets instead of scanf in order 
    // to prevent buffer overflow problems 
    fgets(orig, 31, stdin); 

    // remove trailing newline 
    orig[strlen(orig) - 1] = '\0'; 

    uppercase(dest, orig); 
    printf("uppercase string = %s", dest); 

    return 0; 
} 

// uppercase function definition 
char * uppercase(char * destination, char * origin) { 

    int i = 0; 

    while(origin[i] != '\0') { 

     if(origin[i] >= 'a' && origin[i] <= 'z') { 
      destination[i] = origin[i] + 'A' - 'a'; 
     } else { 
      destination[i] = origin[i]; 
     } 

     i ++; 
    } 

    destination[i] = '\0'; 

    return destination; 
} 
+0

я буду использовать fgets.Thank вы! – Fran

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

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