2015-10-08 5 views
-3

Я хочу сделать простую кодировку на моем ноутбуке (Windows 7). Кажется, что все, что я написал, только заглавное 1 слово в начале.Простой кодирование в верхнем регистре в C

использовать ли я% s /% с /% [^ \ п]

Что я suppoused делать?

Im с помощью Microsoft Visual C++ 2010 Express

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

int main() 
{ 
    char kalimat; 
    scanf ("%[^\n]",&kalimat); 
    kalimat=toupper(kalimat); 
    printf("%s",kalimat); 
    getchar(); 
    return(0); 
} 
+2

'kalimat' является только один символ, это не строка. – Barmar

+0

вы должны определить 'kalimat' как массив. Альтернативно, указатель и malloc достаточно памяти для вашей строки –

+0

[образец для исправления] (http://ideone.com/c2tuLd) – BLUEPIXY

ответ

1

Вы хотите прочитать слово. Для этого вам нужен массив из char определенного предопределенного размера. Меняем

char kalimat; 

в

char kalimat[64]; /* Can hold 63 chars, +1 for the NUL-terminator */ 

Далее, вы хотите отсканировать слово. Меняет

scanf("%[^\n]",&kalimat); 

в

scanf("%63s", kalimat); 

Изменение, сделанное здесь

  1. Использования %s используется для сканирования слова в отличие от %c, который используется для сканирования символа.
  2. Извлечение амперсанда из-за того, что %s ожидает char*, а не char** или char(*)[64].
  3. Использование спецификатора длины (63, здесь), чтобы предотвратить переполнение буфера.

Затем, если вы хотите

  1. Captalize первый символ массива/слово, используйте

    kalimat[0] = toupper(kalimat[0]); 
    

    или

    *kalimat = toupper(*kalimat); 
    
  2. заглавной все символы массив, используйте цикл, вызывающий toupper по каждому индексу массива:

    int i, len; /* Declare at the start of `main` */ 
    
    for(i = 0, len = strlen(string); i < len; i++) /* Note: strlen requires `string.h` */ 
        kalimat[i] = toupper(kalimat[i]); 
    

... Но вы, возможно, потребуется изменить

getchar(); 

в

int c; /* Declare at the start of `main` */ 
while((c = getchar()) != EOF && c != '\n'); 

для того, чтобы предотвратить consle от закрытия ,


Исправлен код:

#include <stdio.h> 
#include <ctype.h> 
#include <string.h> /* For `strlen` */ 

int main() 
{ 
    int i, len, c; 
    char kalimat[64]; 

    scanf ("%63s", &kalimat); 

    /* `*kalimat = toupper(*kalimat);` */ 
    /* or */ 
    /* `kalimat[0] = toupper(kalimat[0]);` */ 
    /* or */ 
    /* `for(i = 0, len = strlen(string); i < len; i++) 
     kalimat[i] = toupper(kalimat[i]);` */ 

    printf("%s", kalimat); 

    while((c = getchar()) != EOF && c != '\n'); 
    return(0); 
} 
0

Функция библиотеки C:

int toupper(int c); 

преобразует строчную букву в ее верхнем регистре

Если вы хотите напечатать все буквы строки в верхний регистр:

int i=0; 
while(str[i]) 
{ 
putchar (toupper(str[i])); 
i++; 
} 

Однако для капитализации одного символа вы могли бы просто использовать:

putchar (toupper(mychar)); 

Функция возвращает в верхнем регистре, если существует один или возвращает тот же символ послал к нему.

В C можно хранить строку:

char *string1="Elvis"; 
char string2[]="Presley"; 
char string3[4]="King";