このプログラムは、16個の文字列を含む配列kstrの中から一つ文字列を選択して、ある順番に基づいて出力しそれをタイピングすると消える
プログラムです。(要はタイピング練習プログラムです。)
表示される順番としては、もしも
「qwert」の文字列が選択されたとしたら…
qw,wq,qe,eq,qr,rq,qt,tq,we,ew,wr,rw,wt,tw,er,re,et,te,rt,tr
という規則正しい順番で、出力されていきその通りにタイピングをして
消していくプログラムを実現したいと思っています。
ところが、下記の通りに書いたところコンパイルしても無反応に
なってしまいました。なぜ、動作しないのでしょうか。
ご教授いただきたいです。
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<string.h>
#include"getputch.h"
char *kstr[] ={
"12345","67890-^\\","!\"#$%","&'()=~|","qwert","yuiop@[","QWERT","YUIOP`{","asdfg","hjkl;:]",
"ASDFG","HJKL+*}","zxcvb","nm,./\\","ZXCVB","NM<>?_"};
int main(void)
{
int nagasa=sizeof(kstr)/sizeof(kstr[0]);
int len,i,x,k,j,m,l;
char shutu[4];
char gyakushutu[4];
srand(time(NULL));
x=rand()%nagasa;
len=strlen(kstr[x]);
for(i=0;i<len;i++)
{
for(j=i+1;j<len;j++)
{
for(k=0;k<4;k++)
{
if(k%2==0)
{
shutu[k]=kstr[x][i];
}
else
{
shutu[k]=kstr[x][j];
}
}
shutu[4]='\0';
for(l=0;l<4;l++)
{
if(l%2!=0)
{
gyakushutu[l]=kstr[x][i];
}
else
{
gyakushutu[l]=kstr[x][j];
}
}
gyakushutu[4]='\0';
for(m=0;m<4;m++)
{
printf("%s \r",&shutu[m]);
fflush(stdout);
while(getch()!=shutu[m]);
printf("%s \r",&gyakushutu[m]);
fflush(stdout);
while(getch()!=gyakushutu[m]);
}
}
}
return 0;
}
No.1ベストアンサー
- 回答日時:
>「qwert」の文字列が選択されたとしたら…
>qw,wq,qe,eq,qr,rq,qt,tq,we,ew,wr,rw,wt,tw,er,re,et,te,rt,tr
>という規則正しい順番で、
この部分を私はよく理解していないのですが
とりあえず、
#include"getputch.h"
のところを
#include <conio.h>
にして
WindowsXP、VisualC++2008
で実行したら、それらしく?動作しました。
ということで、
getputch.hファイルの内容が知りたいです。
また、動作環境(OSやCのコンパイラ)は何を使用しているのでしょうか?
この回答への補足
>「qwert」の文字列が選択されたとしたら…
>qw,wq,qe,eq,qr,rq,qt,tq,we,ew,wr,rw,wt,tw,er,re,et,te,rt,tr
>という規則正しい順番で、
>この部分を私はよく理解していないのですが
返信遅くなり且つわかりにくい表現申し訳ありませんでした。
捕捉になりますが、qwならば「qwqw」、wqならば「wqwq」と
表示させるようになっています。
まず、qwqwと表示されます。そこで、プレイヤーはタイピングを
します。
qを入力すれば、wqwだけ残り次にwを入力すればqwだけ残り、同様に
qでwが残ります。そして、最後のwを入力することにより次の文字列
である「wqwq」が表示されて同様に消していくことになります。
>qw,wq,qe,eq,qr,rq,qt,tq,we,ew,wr,rw,wt,tw,er,re,et,te,rt,tr
それがこのサイクルで表示されていくというプログラムです。
「#include"getputch.h"」←これは、conioと同じ意味で大丈夫です。
現に私の環境で、「#include"getputch.h"」を「#include <conio.h>」に
変更して動作させてみても全く同じ結果(無反応)になりました。
動作環境はおそらく、「回答者様と同じWindows系」のVistaです。
>それらしく?動作しました。
本当ですね。WindowsXP、VisualC++2008を使って動作させてみると
期待していた動作とは少し違いましたが修正することで期待通りの
動作をしました。
私は今まで、「Borland C++ Compiler 5.5」を使っていましたが
何が原因で動作しなかったのでしょうかね。
この「Borland C++ Compiler 5.5」も「WindowsXP、VisualC++2008」
と同種のコンパイラーだと思ったもので…
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語の入力した文字を反転させ...
-
配列をnビットシフトする
-
charからLPTSTRへの変換方法
-
C言語エラーについて
-
c言語
-
カラー画像からグレースケール...
-
'const char *' 型は 'char *' ...
-
C言語です
-
char* を渡したとき、不適切なP...
-
fgetsなどのときのstdinのバッ...
-
charでの計算?
-
C言語、リダイレクト
-
ひとつのプログラムにしたいの...
-
ビット演算について
-
【至急】C言語の問題です、どな...
-
文字列がNULLか空文字列かの判定
-
object型からchar型へ変換の方法
-
文字列から空白を取り除きたい...
-
C言語のsendとrecv
-
int型からchar型への変換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
charからLPTSTRへの変換方法
-
charでの計算?
-
配列をnビットシフトする
-
'const char *' 型は 'char *' ...
-
型変換
-
テキストデータをそのままバイ...
-
文字列から空白を取り除きたい...
-
CStringをwchar_tに変換したい
-
絶対パスからのファイル名の切...
-
fgetsなどのときのstdinのバッ...
-
ネットワークにつながっている...
-
str系関数を使わずに二つの文字...
-
3桁区切(コンマ)記号をつけ...
-
atoi( ) の反対をやりたい
-
double型の値をchar配列に変換...
-
C言語のfor文です。 繰り返しの...
-
switch文で文字を比較すること...
-
ファイル名である文字列からbas...
-
c++ 文字列を入力して、一文字...
-
strncpyと_tcsncpy_sのヌルの扱...
おすすめ情報