文字を流すプログラムで実行時にエラー
Posted: 2010年8月16日(月) 09:11
はじめまして。今文字を流すプログラムを作っているのですが、
流す方向を変えたとたん、3文字以上入力するとエラーが出るようになりました。
中断を押してソースを見ると、printfの所の左に矢印がついていました。
これをちゃんと動くようにしてくれませんか?
関数(ヘッダファイル)は僕のコンパイラに標準でついてたらOKです。
お願いします。
//若干無駄な部分がありますが、気にせず削ってかまわないです。
PC:FujitsDeskPowerCE50J7
CPU:AMD Athlon XP 3000+ 2.09GHz
メモリ:512MB
OS:WindowsXpHomeSP3
コンパイラ:VC++2008Express
矢印にマウスオーバーしたときのツールチップ:
「このスレッドによって現在の関数が実行された後、次に実行されるステートメントです。」
エラーメッセージ:「mozi.exe の 0x1029984f でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00000063 を読み込み中にアクセス違反が発生しました。」
abcと入力した場合
実行結果:abc(null)
//↑これが表示されたときにエラーメッセージが出ます。
ソースファイル:
#include "stdafx.h"
#include <iostream>
#include <string>
#include <string.h>
#include <windows.h>
int _tmain(int argc, _TCHAR* argv[/url])
{
char in[30];
int c, c2,d,sec,more,i,q,w,m = 1;
retry: i = 1;
q = 1;
while(45 >= q)
{
printf(" ");
q++;
}
printf("←\r表示する文字>>>"); //メモリ破壊防止
scanf( "%s", &in );
printf("速さ>>>");
scanf( "%d", &sec );
printf("ok.\n");
c = strlen(in);
c2 = c * 2;
printf("%s", in);
std::string in2( in );
while( c > i )
{
w = i - 1;
while(w != 0)
{
printf("%s",in[c - w]);
fflush(stdout);
w--;
}
printf("%s\r",in[c]);
fflush(stdout);
Sleep(sec);
i++;
}
if(c == i){ printf("%s\r",in);}
fflush(stdout);
Slep(sec);
i++;
while(80 - c > i)
{
w = 0;
while(i - c > w)
{
printf(" ");
fflush(stdout);
w++;
}
printf("%s\r",in);
fflush(stdout);
Sleep(sec);
i++;
}
printf( "\nもう一度しますか?(はい=>1、いいえ=>2)>>>" );
scanf( "%d", &more );
if( more % 2 == 1 )
{
goto retry;
}
printf( "\nBye!!" );
Sleep(1000);
return 0;
}
流す方向を変えたとたん、3文字以上入力するとエラーが出るようになりました。
中断を押してソースを見ると、printfの所の左に矢印がついていました。
これをちゃんと動くようにしてくれませんか?
関数(ヘッダファイル)は僕のコンパイラに標準でついてたらOKです。
お願いします。
//若干無駄な部分がありますが、気にせず削ってかまわないです。
PC:FujitsDeskPowerCE50J7
CPU:AMD Athlon XP 3000+ 2.09GHz
メモリ:512MB
OS:WindowsXpHomeSP3
コンパイラ:VC++2008Express
矢印にマウスオーバーしたときのツールチップ:
「このスレッドによって現在の関数が実行された後、次に実行されるステートメントです。」
エラーメッセージ:「mozi.exe の 0x1029984f でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00000063 を読み込み中にアクセス違反が発生しました。」
abcと入力した場合
実行結果:abc(null)
//↑これが表示されたときにエラーメッセージが出ます。
ソースファイル:
#include "stdafx.h"
#include <iostream>
#include <string>
#include <string.h>
#include <windows.h>
int _tmain(int argc, _TCHAR* argv[/url])
{
char in[30];
int c, c2,d,sec,more,i,q,w,m = 1;
retry: i = 1;
q = 1;
while(45 >= q)
{
printf(" ");
q++;
}
printf("←\r表示する文字>>>"); //メモリ破壊防止
scanf( "%s", &in );
printf("速さ>>>");
scanf( "%d", &sec );
printf("ok.\n");
c = strlen(in);
c2 = c * 2;
printf("%s", in);
std::string in2( in );
while( c > i )
{
w = i - 1;
while(w != 0)
{
printf("%s",in[c - w]);
fflush(stdout);
w--;
}
printf("%s\r",in[c]);
fflush(stdout);
Sleep(sec);
i++;
}
if(c == i){ printf("%s\r",in);}
fflush(stdout);
Slep(sec);
i++;
while(80 - c > i)
{
w = 0;
while(i - c > w)
{
printf(" ");
fflush(stdout);
w++;
}
printf("%s\r",in);
fflush(stdout);
Sleep(sec);
i++;
}
printf( "\nもう一度しますか?(はい=>1、いいえ=>2)>>>" );
scanf( "%d", &more );
if( more % 2 == 1 )
{
goto retry;
}
printf( "\nBye!!" );
Sleep(1000);
return 0;
}