ページ 11

文字を流すプログラムで実行時にエラー

Posted: 2010年8月16日(月) 09:11
by tyeiqp21
はじめまして。今文字を流すプログラムを作っているのですが、
流す方向を変えたとたん、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;
}

Re:文字を流すプログラムで実行時にエラー

Posted: 2010年8月16日(月) 09:19
by シエル
printf("%s",in[c - w]);
   fflush(stdout);
   w--;
  }
printf("%s\r",in[c]);

一瞬しか見てないですけど、このprintfって%sじゃなくて%cでは?

Re:文字を流すプログラムで実行時にエラー

Posted: 2010年8月20日(金) 19:47
by tyeiqp21
シエルさん、ありがとうございます。
返事が遅くなってしまってすいませんでした。
アドバイスいただいたところを修正すると、きちんと動きようになりました。