- 締切済み
キーボードからの入力・出力について
A__の回答
- A__
- ベストアンサー率47% (22/46)
コンソールに出力されたのは、たぶん 入力してください(\n) ABCDEFG(EOF\n)ABCDEFG(\n) strlen(array)=7(\n) だと思いました。 コントロール+Z を押した時のEOF も、A、B、C とかの キーと同じように、コンソールに出力されています。 (EOF\n) のようになると、\n は改行にならないみたいです。 でも、(EOF\n) と出力することによって、その後の \n は 正常に動作するみたいです。 … } putchar( '\n' ) ; /* ★この改行は?★ */ puts( array ) ; … これを、 … } putchar( '\n' ) ; /* ★この改行はEOFをつぶすため★ */ putchar( '\n' ) ; /* ★実際に改行させるためのもの★ */ puts( array ) ; … にすれば思い通りになるかもしれません。 #include <stdio.h> int main(void) { printf("あああ") ; getchar( ) ; /* ★EOFを入れて実験★ */ printf("いいい") ; printf("ううう") ; putchar( '\r' ) ; printf("えええ") ; putchar( '\n' ) ; printf("おおお") ; return 0 ; } この結果は あああおおお でした。 コンソールにEOFが出力されると、それ以降に \n が出力されるまでは 出力されるはずの文字を消してしまうみたいでした。
関連するQ&A
- C言語について
#include <stdio.h> int main(void) { printf("123456\tABC DEFGHIJK\n"); printf("2006/4/14\n"); printf("programing\n"); } のprintfをすべてputsに書き換えてコンパイル・実行すると、 #include <stdio.h> int main(void) { puts("123456\tABC DEFGHIJK\n"); puts("2006/4/14\n"); puts("programing\n"); } になると思うんですけど、そのputsを用いて上のprintfを用いたプログラムと同じ出力を得るにはどのようなプログラムに変えればいいのでしょうか?
- ベストアンサー
- C・C++・C#
- c言語の文字列の逆順のプログラムがわかりません
文字列を逆順して出力するプログラミングがわかりません。 #include <stdio.h> #include <string.h> void reverse(char *moji, char *gyaku); int main(void) { char x[30]; char y[30]; puts("文字を入力してください。\n"); scanf("%s", x); reverse(x, y); printf("逆順すると%sです。\n", y); return (0); } void reverse(char *moji, char *gyaku) { int i, len; len = strlen(moji); gyaku = moji + len - 1; for(i = 0; i < len; i ++){ putchar((int)*gyaku); gyaku--; } } 理想とする実行結果は 文字を入力してください。 abcdefg 逆順するとgfedcbaです。 なんですが、 上記のソースを実行すると 文字を入力してください。 abcdefg gfedcba逆順すると(謎の漢字)です。 となります。 どこがおかしいんでしょうか? よろしくおねがいします。
- ベストアンサー
- C・C++・C#
- どこがちがうのでしょうか?
以下の二つのプログラムはユーザーが文字を入力し、80文字以下なら ピリオドを追加して表示するというものです。上はうまくいきますが、下はうまくいきません。なぜでしょうか? #include<string.h> #include<stdlib.h> int main() { char str[80]; int i; printf("文字列を入力してください。\n"); gets(str); if(strlen(str)<80) { for(i=strlen(str);i<79;i++) strcat(str,"."); } printf("%s",str); } #include<stdio.h> #include<string.h> #include<stdlib.h> int main() { char str[80]; int i; printf("文字列を入力してください。\n"); gets(str); if(strlen(str)<80) { for(i=strlen(str)+1;i<79;i++) str[i] = "."; } printf("%s",str); }
- ベストアンサー
- C・C++・C#
- c言語のファイル出力について
現在C言語の課題に取り組んでおり、ファイルの中身通りに出力させたいのですが 「ファイルの中身」 2022/11/14 16:19:56 4+4,8.000000 2022/11/14 16:20:14 7+7,14.000000 2022/11/14 16:20:18 8+8,16.000000 2022/11/14 16:19:56 4+4,8.000000 2022/11/14 16:20:14 7+7,14.000000 2022/11/14 16:20:18 8+8,16.000000 2022/11/14 16:19:56 4+4,8.000000 2022/11/14 16:20:14 7+7,14.000000 2022/11/14 16:20:18 8+8,16.000000 「出力結果」 2022/11/14 16:19:56 4+4,8.000000 2022/11/14 16:20:14 7+7,14.000000 2022/11/14 16:20:18 8+8,16.000000 こういう形で改行されて出てきてしまいます。 どなたか修正点を教えて頂けないでしょうか? #include <stdio.h> #include <string.h> #include <stdlib.h> int main() { int r,i,n; FILE* fp; char sin[9][1000]; fp = fopen("log.txt", "r"); if (fp == NULL) { printf("ファイルオープン失敗\n"); return -1; } for (i = 0; i < 9; i++) { fscanf(fp, "%s", &(sin[i])); } fclose(fp); for (i = 0; i < 9; i++) { printf("%s\n", sin[i]); } return 0; }
- ベストアンサー
- C・C++・C#
- strlen=がなかったら表示はどうなりますか!?
#include <stdio.h> #include <string.h> int main() { char mojiretsu[10]; int nagasa; mojiretsu[0] = 'A'; mojiretsu[1] = 'B'; mojiretsu[2] = 'C'; mojiretsu[3] = '\0'; printf("%s\n", mojiretsu); nagasa = strlen(mojiretsu); printf("strlen=%d\n", nagasa); } 私のPCはgccプログラムがうまく働いていません 。 なのでコンパイル後の結果が分かりません。 以上のプログラム表示結果は参考書では ABC strlen=3 です。 それで "strlen=%d\n" を"%d\n"にしたら 表示結果は ABC 3 となるのでしょうか!? よろしくお願いします。
- ベストアンサー
- C・C++・C#
- 0と1のファイルへの書き込み、出力
c言語で0と1の乱数を生成し、ファイルに出力したいのですが、出力がおかしくなってしまいます。 正しく0と1をファイルに書き込み、出力するにはどうしたらいいでしょうか。 わかる方いらっしゃいましたら教えてください。 お願い致します。 #include<stdio.h> #include <stdlib.h> #include <time.h> #define max 3000000 #define nrand(n) (int)((double)n*rand()/RAND_MAX) /* 0以上n未満の整数を返す */ int main() { FILE *Wf; char W_filename[20]; int *W=(int *)malloc(sizeof(int) * max); printf("入力ファイル名 : "); scanf("%s",W_filename); if( ( Wf=fopen(W_filename,"w") ) == NULL ) printf("ファイルを開けません\n"); else { for(i=0;i<max;i++) { W[i]=nrand(2); fprintf(Wf,"%d ",W[i]); } } fclose(Wf); free(W); } 出力が ‰‱‱‰‱‱‰‱‱‰‰‰‰‱‰‱‰‱‰‰ のようになってしまいます。 Wにはちゃんと0か1が入っているみたいなのですが・・・
- ベストアンサー
- C・C++・C#
- abcdとキーボードで打ったらdcbaと表示されるプログラム
C言語に関しては初心者です。 メイン関数は変更せずに行います。 /* reverse.c: reverse a given string */ #include <stdio.h> #include <string.h> void reverse(char *); /* プロトタイプ宣言 */ int main(void) { char str[100]; scanf("%s", str); reverse(str); printf("%s\n", str); return (0); } void reverse(char *s) { char n; int i; char str; n = strlen(str) - 1; for(i=0,i++,i<=100) { s[i] = *s[n-i]; printf("%s\"s[i]); } }
- ベストアンサー
- C・C++・C#
- ポインタ勉強中です。しかも実行するとおかしいです。
<本に載ってたソース> #include<stdio.h> #include<string.h> int main() { char msg[20]; char *str=NULL; int i; int cnt; str=&msg[0]; printf("文字を入力してください"); scanf("%s",&str); cnt=strlen(msg); str=msg+cnt; for(i=cnt;i>=0;i--){ printf("%c",*(str--)); } printf("\n"); return 0; } char *str=NULL;は、ポインタstrを空にするということでしょうか? いつもながらstrlenとsizeofが混じります。 sizeofがバイトの大きさで、strlenが、文字数でしたっけ?
- ベストアンサー
- C・C++・C#
- 入力制御
c言語初心者です。 以下のプログラムをみてください。 #include<stdio.h> int main() { char ch[3]; fgets( ch, 3,stdin ); if(ch[0]=='3') { printf("Hello!\n"); } else if(ch[0]=='2') { puts("回る"); } else{ puts("間違いf"); } return 0; } このプログラムでは2を入力すると"回る"と表示されますが 2wでも同じように表示されてしまいます。 制限して2wで入力したら"間違い"と表示させたいのですがなかなかうまくいきません。 どなたか教えてください。
- ベストアンサー
- C・C++・C#
- 入力した値をファイルに出力するプログラム
C++でscanfなどで入力した値をファイルに出力するプログラムを作りたいのですがうまくいきません。下記のプログラムを書いてみたのですが入力した値を出力することができませんでした。どこを変更すればいいのかわかる方がいましたらご指導よろしくお願いします。 #include<iostream> #include <fstream> using namespace std; int main( ) { char ch; char ss[10]; int dt; int i,p; ofstream fileout; // 出力用ストリームの宣言 ifstream filein; // 入力用ストリームの宣言 fileout.open("sampledata.txt"); // 出力ファイルをオープン if (!fileout) // エラー処理 { cout << "エラー!出力ファイルをオープンできません\n"; return 1; } printf("IDを入力してください:"); scanf("%s",i); printf("\nパスワードを入力してください:"); scanf("%s",p); printf("\n登録しました。"); fileout << "ID=%d PASS=%s\n",i,p; // 文字列データ出力 fileout.close(); // 出力ファイルをクローズ filein.open("sampledata.txt"); // 入力ファイルをオープン if (!filein) // エラー処理 { cout << "エラー!入力ファイルをオープンできません\n"; return 1; } filein >> ch; // 文字データ入力 filein >> ss; // 文字列データ入力 filein >> dt; // 数値データの入力 cout << ch << '\n'; cout << ss << '\n'; cout << dt << '\n'; filein.close(); // 出力ファイルをクローズ return 0; }
- 締切済み
- C・C++・C#
補足
ありがとうございます。 ご回答のとおりです。 でも、どうも私はなんかなぜそうなのか納得しかねるんです。。 そういうものだと思うしかないのでしょうか。