• ベストアンサー

toupperに関して

C言語初心者です。 勉強のために本に書いてあるものを写しながら勉強しているのですが、 #include <stdio.h> #include <ctype.h> int main() { int c; while ((c=getchar())!=EOF){ c=toupper(c); putchar(c); } } 以上のものを写したのですが、入力した文字が小文字であろうと大文字であろうと関係なくそのまま表示されます。 どこを間違えているのでしょうか? どうぞよろしくお願いいたします。

noname#125895
noname#125895

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

プログラム自体に間違いは無いと思います。 「a」と打ったら「A」と表示すると思ったのに「a」と表示される、ということでよいしょうか? 入力しているときは、コマンドプロンプトなりシェルなりが入力した文字をそのまま表示します(これをエコーバックと言います) 実際にプログラムに送られるのは、リターンキーを押した後です。 例) abcde(リターン)←エコーバック/リターン入力でまとめてプログラムへ送る ABCDE←プログラムからの出力

noname#125895
質問者

お礼

そういうことだったんですか。 自分で勝手に入力した文字が即座に大文字になるものと思い込んでいました。ありがとうございます。

その他の回答 (1)

  • anicicle
  • ベストアンサー率36% (129/356)
回答No.1

ASCIIコードなら問題なく変換し表示するです。(VC6でも動作確認済み) 入力がマルチバイト文字だったりしませんか? ちなみに、toupper()は'a'~'z'を'A'~'Z'に変換する認識もあっていますよね?

関連するQ&A

  • 2つのプログラムの違い

    どうしても分からなかったので投稿しました。よろしくお願いします。 #include<stdio.h> int main(void) { int c; while((c=getchar())!=EOF){ putchar(c); } return 0; } のプログラムをコマンドプロンプトで入力すると、 abc abc なんですが、 #include<stdio.h> int main(void) { int c,i; i=0; while ((c=getchar())!=EOF) { putchar(c); i++; printf("%d\n",i); } return 0; } の場合、 abc a1 a2 a3 4 になります。 自分は abc a1 a2 a3 になると思ったのですが、a3と4の隙間と4は何故出て来たのでしょうか?

  • CTRL+Dでループを抜けるには

    RedHatLinux7J環境でC言語のプログラミングを行っています。キーボードからCTRL+D(EOF)が入力されるまで、1文字入力しその文字コードを出力するプログラムです。 しかし、CTRL+Dを2回押さないと処理が終わりません。 これはなぜなのでしょうか。ご存知の方いらっしゃいましたらお願いいたします。 #include<stdio.h> main(){ int ch; while((c=getchar())!=EOF) printf("%d ",ch); putchar('\n'); }

  • 置き換えのプログラム

    c言語初心者です。 入力されたタブを\tに置き換えて、入力全体を出力するプログラムを、 #include <stdio.h> main() { int c; while((c=getchar())!=EOF){ if(c=='\t') printf("\\t");   putchar(c); } } と書いて実行できたのですが、入力した文字(タブ、空白、改行などは除く)を¥(バックスシュラッシュ)に置き換えて出力するプログラムにするためには、どのように書き換えればよいのでしょうか? どなたかご教授お願いします。

  • MinGWのC言語でCTRL+Zで処理が終了しない

    C言語をMinGWで学習していますが、以下のコードでCTRL+Zで処理が終了しません。お教え下さい。 #include <stdio.h> int main(void) { int ch; while ((ch = getchar()) != EOF) putchar(ch); return 0; } 端末エミュレータはminttyで、OSはWindws xp sp3です。ちなみにMinGW shellで実行するとCTRL+ZとEnterで処理が終了します。

  • getchar関数について

     非常に初心者な質問なのですが、このようなCプログラムをみたことがあります。 #include <stdio.h> int main(void) { int c; while((c = getchar()) != EOF){ putchar(c); putchar(c); } return 0; } なのですが、このプログラムは、実行した状態で、「Hello」と入力して改行すると、「HHeelllloo」と表示されるのです。  そこで疑問なのですが、最初に宣言した変数は c だけなのに、どうして一気に「HHeelllloo」と表示できるのでしょうか?  個人的な予想をすると、最後に入力した「o」だけが表示されるような気がしてたまらないのですが・・・。    なぜなのか教えてください。

  • ループのとめ方

    入力した文字を小文字から大文字に 変えるプログラムで、コントロール+z で、ループを抜け出すようにしたい。 連続して2度コントロール+zを 押さないととまらないのですが、 どのようにすれば、1度コントロール+zを 押すだけで、終了できるのでしょうか? 何かアドバイスをお願いします。 ======================================== #include <stdio.h> #include <ctype.h> #include <string.h> int main(void) { char moji[50],check=0; int i,len; while(check !=EOF){  printf("Enter : ");  check = scanf("%s",moji);  len=strlen(moji);  if(check!=EOF){   printf("Display : ");   for(i=0;i<len;i++){     printf("%c",toupper(moji[i]));   } } } return 0;

  • C言語 プログラミング 文字列

    C言語のプログラミングについての質問です。 文字列を入力して、それを逆順に表示するというプログラムを作っているのですが、 どうしても上手くいきません。 どこか間違えているのかわかりません。 わかる方いらっしゃいましたらご回答お願いします。 #include <stdio.h> int main(void) { char data[100]; int i, leng; char c; leng = 0; c =getchar(); while((c != '\n') && (c != EOF)) { data[leng] = c; leng = leng + 1; c = getchar(); } printf("%c", data[c]); return 0; }

  • 文字カウンタ

    英語の文章中で、二文字単位で読み取って、その文字列の数を出力しようと思っています。 例 hello hey you → he:2 ll:1 o :1 y :1 yo:1 u :1 解析に用いるのは、C言語でなくても、エクセルでもUNIXコマンドでも構いませんが、とりあえず、文字をカウントしたいです。 C言語での文字カウンタを作ってみたのですが、一文字単位で読みとるものしか作れませんでした。 #include <stdio.h> #include <ctype.h> int main( void ) { int ch, i; int alpcnt[26] = {0}; printf( "文字を入力\n" ); while ( ( ch = getchar( ) ) != EOF ) { if ( isupper( ch ) != 0 ) { alpcnt[ch-'A']++; } else if ( islower( ch ) != 0 ) { alpcnt[ch-'a']++; } } for ( i = 0;i < 26; i++ ) { printf( "%c : %3d個入力\t\t", 'a'+i, alpcnt[i] ); if ( i%3 == 2 ) putchar( '\n' ); } return 0; } これを少し改造するだけで作れますでしょうか? 宜しくお願いします。

  • WindowsでEOF

    簡単な質問で恐縮ですが、現在WindowsでVC++2010Expressでコードを書いています。 そこで、以下の様な入力文字数を返すコードを書いているのですが、コマンドプロンプト上でCtrl+Z(Ctrl+Dも試した)を押してもストップしてくれません。(コマンドプロンプト上に「^Z(^D)」と表示されるだけです。 どなたか教えて頂けませんでしょうか? #include <stdio.h> int main() { int strText; int counter=0; while( (strText=getchar() ) != EOF){ ++counter; } putchar(counter); return 0; }

  • 文字列を関数に渡すぷろぐらむなのですがおかしいです。

    <ソース> #include<stdio.h> #include<stdlib.h> void str(char a[]); int main() { char st[10]="abcde"; str(st); str("ABCabc123"); return 0; } void str(char a[]) { int i; printf("%s\n",a); i=0; while(a[i]){ a[i]=toupper(a[i]); putchar(a[i]); i++; } putchar('\n'); } 分からないところがあるので質問します。 toupperは、大文字にするんですよね。 putcharは、基本的にchar型でしたっけ? putsとgetsは、int型でしたっけ? 後、プログラムが暴走してます。 どこがおかしいんでしょう?

専門家に質問してみよう