• 締切済み

putsとputcharの違い?

putcharとputsの違いとはなんですか? 今勉強している while分の最後にいつも使われているのですが、使い方がよくわかりません。 文字を表示するだけであれば、putsと相違ないような気がするのですが(改行すること以外) どのような違いがあるのか教えてください。 よろしくお願いします。

みんなの回答

  • ballville
  • ベストアンサー率47% (233/487)
回答No.2

jmanのページを貼っておきます。 改行すること以外、putsと変わらないのは、fputs( s, stdout)です。 putcharではありません。 ----------------------------------------------------------------- 名前 fputc, fputs, putc, putchar, puts - 文字と文字列の出力 書式 #include <stdio.h> int fputc(int c, FILE *stream); int fputs(const char *s, FILE *stream); int putc(int c, FILE *stream); int putchar(int c); int puts(const char *s); 説明 fputc() は、キャラクタ c を unsigned char にキャストし、 stream に書き込む。 fputs() は、文字列 s を stream に書き込む。文字列に続く '\0' は出力しない。 putc() は、 stream を一度以上評価するマクロとして実装されているかも知れないという点を除き、 fputc() と同じである。 putchar(c); は、 putc(c,stdout) と同じである。 puts() は、文字列 s と改行を stdout に書き込む。

参考URL:
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/puts.3.html
  • MASATO3
  • ベストアンサー率60% (27/45)
回答No.1

putcharは、1文字だけ出力します。 putsは、文字列を改行付きで出力します。 文字列を出力できるので、putsは一回の呼び出しで複数の文字を出力することができます。この点がputcharとの最大の違いだと思います。

関連するQ&A

  • 改行させずに文字配列を出力させる関数

    改行させずに文字配列を出力させる関数は、printf以外にありますか? printf("Hello world!!"); //改行せずに出力 char str[]="Hello world!!"; puts(str); //改行されて出力 出力の最後に自動的に改行文字を追加しないで、文字配列を表示する標準関数って、printf以外にありますか? もしくは、改行されない関数が必要な場合は自作するしかありませんか?

  • scanfについて

    こんにちわ。 今Cのプログラムを勉強しているんですが, puts("入力します:"); if (fscanf(stdin,"%s", name) == EOF) { puts("エラーです"); } では,改行のみの場合に,何も返さずにもう一度fscanfが読み込まれますよね。 (fscanfは改行のみの場合はそれ自身の関数が再度呼ばれると思うんですが・・・) これを改行もエラーとして表示するにはどうすればよろしいでしょうか。 ただし,入力文字は2文字以上です。 他の入力関数を用いることになってもいいんですが,わかる方,よろしくおねがいします。

  • Cプログラムの質問

    スペースを9個あけ、その次に*を表示させ、改行するというプログラムを作ろうとしています。一応プログラムを作ってみたんですが、いきませんでした。 #include <stdio.h> int main(){ int y, n; y = 10; while(n < y){ putchar(' '); } putchar('*'); putchar('\n'); return 0; } 初心者なので、どこが間違っているのかわかりません。教えてください。

  • 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」だけが表示されるような気がしてたまらないのですが・・・。    なぜなのか教えてください。

  • toupperに関して

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

  • C言語の問題-配列について

    今、独学でC言語をやっているんですが本にのっている問題に解答がなくわかりません。 問題はbunpu[tensu[i] / 10]++;はどういう意味を表すかです。 do-while分の繰り返しがおわった後にbumpuに++があるので+1をすればいいのでしょうか?よくわかりません・・・ 学生10人の点数の分布を10点ごとに分布グラフとして表示します。 #include <stdio.h> #define NUMBER 80 int main (void) { int i,j,num; int tensu[NUMBER]; int bunpu[11] = {0}; puts("点数を入力してください"); for("i =0; i < num; i++"){ printf("%2d番",i + 1); do{ scanf("%d",&tensu[i]); if(tensu[i] < 0 || tensu[i] > 100) printf("0以上100以下"); }while (tensu[i] < 0 || tensu[i] > 100); bunpu[tensu[i] / 10]++; } puts("\n 分布ぐらふ "); printf(" 100:"); for (j = 0;j < bumpu[10];j++) putchar('*') putchar('\n') for(i = 9; i>=0; i--) { printf("%3d - %3d:",i*10,i*10+9); for (j=0; j< bunpu[i];j++) putchar('*'); putchar('\n'); } return(o); }

  • whileでの繰り返し表示

    すみません。C の初心者です。 while()で下記の内容を作成しようと しているのですが、putchar()を使わず 作成すると言う相談です。 また、prinrf()を使わないで 実行例が出来るのでしょうか? ※10が入力され場合の実行の時 ********** ←10個 0または負の値が入力されると、「*」は表示せず、改行のみを表示すること。 基本的事で恐縮ですが、初心者に分かり易く教えて下さい。

  • スペースで区切った3つの数値の大小を比較する

    C初心者です。 たとえば「32 49 67」と入力させて、 その大小を比較するプログラムを書きたいんですが、 どうやって数値をひろっていいのか分かりません;; int型でたとえばiocharという変数を宣言して while( (iochar = getchar()) != EOF)とか書いてみても putchar(iochar)で表示することはできても 32、49、67を独立した数値として扱ってはくれないですよね……? さらに表示したあとプログラムが終了しないので exit()を使ってみたんですけど変化なくて; while(){}の中に入れちゃうとputchar(iochar)が最初の1文字を 表示しただけで終了しちゃうし……。 初歩の初歩で申し訳ないんですけど、何かいい解決策があれば 教えてもらえると助かりますorz

  • キーボードからの入力・出力について

    ☆いつもお世話になります。☆ 下記のCのプログラムは、入力したものをそのまま表示します。 しかし、出力する直前の改行がされないんです。 #include <stdio.h> #include <string.h> int main(void) { char array[80] ; int c ; int s=0 ; printf("入力してください\n") ; for( ; ; ) { c = getchar( ) ; if ( c != EOF ) { array[s] = c ; s++ ; } else { array[s] = '\0' ; break ; } } putchar( '\n' ) ; /* ★この改行は?★ */ puts( array ) ; printf( "strlen(array)=%d\n", strlen(array) ) ; return 0 ; } キーボードから、 'A' 'B' 'C' 'D' 'E' 'F' 'G' 7文字の入力の後に コントロール+Z を入力します。 ----------------次のようになります。---------- 入力してください ABCDEFGABCDEFG strlen(array)=7 初めのABCDEFGはキーボードからの入力時に表示されたもので、 後のABCDEFGはputsで出力したものと思います。 私は2つのABCDEFGの間に改行が入るんじゃないかなあ~~と思うんですが、 なぜそうならないんでしょうか? VC++6.0でWin32 Console Applicationで作成しています。

  • Ruby 1.9.3でShift-JIS文字列を

    よろしくお願いします。 Rubyでスマフォ(SH-02D)の電話帳のQUOTED-PRINTABLEの文字列を WindowsのShift-JIS文字列に変換してファイルに出力したいのですが putsだと日本語文字列に見えるのですが、printだと[]で囲まれた16進数の (一部は^のように表示されますが)列になってしまいます。 ネットで検索してもprintはそのまま、putsは強制改行があるという 違いしかないように思えるのですがどうすればputsと同じ出力を 強制改行無しに出力できるのでしょうか。 RubyはWindows 7 Professional x64でeclipse INDIGOにAptana Studioを 入れて入力&実行しています。 (プレアデスも入ってます。ソースのエンコードはS-JISです。) sub_column = column[i].split("/;/") quoted_string = sub_column[j].unpack("M") puts quoted_string print quoted_string ---- (抜粋) でputsとprintで見え方が違うのです。

専門家に質問してみよう