2016-11-08 8 views
1

小文字から大文字に変更するプログラムを作成しました。問題は、私は1行の代わりに全文を読む方法を知らない。プログラムは、Enterキーを押した後に出力を返し、Ctrl + Zの後にそのようにします。1行ではなく入力全体を読む

#include <stdlib.h> 
#include <stdio.h> 


void makeUpper(char *s) { 
    int i; 
    for(i = 0; s[i] != '\0'; i++){ 
     s[i] = toupper(s[i]); 
    } 
    printf("%s", s); 
} 


int main() { 
    char string[1000]; 

    fgets(string, 1000, stdin); 

    makeUpper(string); 
    return 0; 
} 
+0

あなたが「代わりに1行のテキスト全体を読んで」とはどういう意味ですかれますか? – Rafal

+0

ここにいろいろなオプションがあります:http://stackoverflow.com/a/1836454/694576 – alk

+0

@Rafal私は、Enterキーを押した後、コンソールのCTRL + Zの直後にデータ受け入れを停止しないことを意味します。 – NouName

答えて

2

fgets()改行が発生すると停止します。したがって、複数の行を読み取ることはできません。だから、あなたは代替案を見なければならないでしょう。

一つの方法であるがgetchar()を使用しているループであると限りがあり、バッファに空きがありますかEOFが受信された:

int main(void) { 

    char string[1000]; 
    size_t i = 0; 

    do { 
     int ch = getchar(); 
     if (ch == EOF) break; 
     string[i] = ch; 
     i++; 
    } while (i < sizeof string - 1); 
    string[i] = 0; 

    makeUpper(string); 
    return 0; 
} 

は(EOFを送信するために)、Ctrl + Zは、Windows上で動作しますが、覚えておいてくださいと読みます。 * nixのようなシステムでは、Ctrl + DキーでEOFを送信する必要があります。

+0

"*' fgets() 'は改行を検出すると停止します*"これはWindows特有のものであると言えるでしょう。 IXのシステムでは、 'EOF'を示す' Ctrl-D'は 'fgets()'をうまく終了させます。 – alk

+0

私は 'D' <->' Z'差分を参照していませんでしたが、ウィンドウ上の 'Ctrl-Z 'はすでにいくつかの入力が与えられていれば' fgets() 'を終了しませんでした。この場合は 'Ctrl-D ')。 – alk

+0

OS特有の手段でEOFを送信するとfgets()が終了します。しかし、AFAICT、OPの問題は、EOFを検出するのではなく、複数の行を読むことではありません(基本的にOPは改行で停止しますが、EOFが明示的に送られるまで読み返しています)。 – usr

3

ちょうどしばらくのloop.hereにあなたのfgets(string, 1000, stdin)を置くソリューション

#include <stdlib.h> 
#include <stdio.h> 

void makeUpper(char *s) { 
    int i; 
    for(i = 0; s[i] != '\0'; i++){ 
     s[i] = toupper(s[i]); 
    } 
    printf("%s", s); 
} 


int main() { 
    char string[1000]; 

    while(fgets(string, 1000, stdin)!=NULL)//for getting input untill pressing CTRL+Z. 
    { 
     makeUpper(string); 
    } 


    return 0; 
} 
+0

これはWindowsでテストしましたか? – alk

+0

@alkはい!最初は私の窓で試してみるとうまくいき、ここに投稿する:) – Real73

+0

どのコンパイラを使用しますか? – alk

関連する問題