-3

ラップトップ(Windows 7)で簡単なタッパーコーディングを行いたいです。私が書いたものはすべて、最初の1単語だけを大文字にしているようです.

%s / %c / %[^\n] を使用するかどうか

私は何をしなければならないのですか?

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);
}
4

2 に答える 2

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. 配列/単語の最初の文字を大文字にし、使用します

    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');

コンソールが閉じないようにします。


固定コード:

#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);
}
于 2015-10-08T09:55:28.403 に答える