dポイントプレゼントキャンペーン実施中!

C言語の質問です><

次のような実行結果が得られるプログラミングをしたいのですが・・

ちなみにポインタや標準関数のstrシリーズは使用不可です。


文字列1:ABCDEFGHIJ
開始位置:0
文字数:3
文字列2:ABC

開始位置が7で文字数が5とかの場合は'¥0'の位置まで表示するようにしたいのですが、自分の以下のプログラムだと開始位置が0で文字が3だとABCと表示できるのですが、開始位置が7で文字数が5とかだとできません><


#include<stdio.h>
void main(void)
{

char m1[]="ABCDEFGHIL";
char m2[11];
int i,j,start,mozikazu;

printf("文字列1:%s\n",m1);
printf("開始位置:");
scanf("%d",&start);
if(start >=0 && start <11)
{
printf("文字数:");
scanf("%d",&mozikazu);
}
if((start+mozikazu)<11)
{
for(i=0;i<mozikazu;i++)
{
m2[i]=m1[i]+start;
}
m2[i]='\0';
}
printf("文字列2:%s\n",m2);


return;
}


どうか教えてください><

A 回答 (4件)

とりあえず、サイズを11って固定すると後々面倒だから、


一番最初にm1[]のサイズをチェックして、そのサイズを使用したほうがいいと思う。
あと、ループ条件はサイズだけでなくm1[]の文末のチェック('\0')も入れたほうがいいかと
    • good
    • 0

ん~, なんか問題がおかしい. 「ポインタが使用不可」なら


scanf("%d",&start);
すらできない.
あと, ぶっちゃけ「無駄な努力」をしてる. 実は printf 一発なんだが....
    • good
    • 0

> if((start+mozikazu)<11)



7 + 5 = 12 ですから、プログラム通りに働きませんね。
else文で11以上の場合の処理を追加されれば良いかと。
    • good
    • 0

m2[i]=m1[i]+start;


m1配列の文字にstart変数の値をプラスするのが変じゃない?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!