Вы хотите прочитать слово. Для этого вам нужен массив из char
определенного предопределенного размера. Меняем
char kalimat;
в
char kalimat[64]; /* Can hold 63 chars, +1 for the NUL-terminator */
Далее, вы хотите отсканировать слово. Меняет
scanf("%[^\n]",&kalimat);
в
scanf("%63s", kalimat);
Изменение, сделанное здесь
- Использования
%s
используется для сканирования слова в отличие от %c
, который используется для сканирования символа.
- Извлечение амперсанда из-за того, что
%s
ожидает char*
, а не char**
или char(*)[64]
.
- Использование спецификатора длины (63, здесь), чтобы предотвратить переполнение буфера.
Затем, если вы хотите
Captalize первый символ массива/слово, используйте
kalimat[0] = toupper(kalimat[0]);
или
*kalimat = toupper(*kalimat);
заглавной все символы массив, используйте цикл, вызывающий 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);
}
'kalimat' является только один символ, это не строка. – Barmar
вы должны определить 'kalimat' как массив. Альтернативно, указатель и malloc достаточно памяти для вашей строки –
[образец для исправления] (http://ideone.com/c2tuLd) – BLUEPIXY