文字列を用いたプログラム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
yatta

文字列を用いたプログラム

#1

投稿記事 by yatta » 15年前

Cという文字が入っている入力文字列のうちC以降の文字列を表示するプログラムなのですが、その後Cが入っていなければ再び文字列を入力させるというプログラムを作っているのですが、うまくいきません。以下にそのプログラムをのせます。どのように改良すればよいのでしょうか。for文をいくつも使うしか方法はないのでしょうか。どなたかお願いします。


#include<stdio.h>

int main(void)

{
char *p,str[1000000];

int i,n=0;

printf("Cを含む文字列を入力してください。\n\n");

scanf("%s",str);


for(p=str;*p!='\0';p++)

{

if(*p=='C'){
printf("%s\n",p);
n++;

}
}

if(n==0)
{
printf("文字列がCを含んでいません。改めて文字列の入力をどうぞ。\n");

scanf("%s",str);

}


return 0;

}

non

Re:文字列を用いたプログラム

#2

投稿記事 by non » 15年前

どこかに
do{

}while(n==0);
を入れてみましょう。

yatta

Re:文字列を用いたプログラム

#3

投稿記事 by yatta » 15年前

早速のお返事をありがとうございます。nonさんの助言をヒントにプログラムを以下のように改造しましたが、Cを含んだ文字列を入力したにも関わらず、「文字列がCを含んでいません。改めて文字列の入力をどうぞ」と出てきます。どこが原因なのでしょうか。よろしくお願いします。

#include<stdio.h>

int main(void)

{
char *p,str[1000000];

int i,n=0;

printf("Cを含む文字列を入力してください。\n\n");

scanf("%s",str);


for(p=str;*p!='\0';p++)

{

if(*p=='C'){
printf("%s\n",p);
n++;

}
}

if(n==0)
{do{

printf("文字列がCを含んでいません。改めて文字列の入力をどうぞ。\n");

scanf("%s",str);

}while(n==0);


}


return 0;

}

non

Re:文字列を用いたプログラム

#4

投稿記事 by non » 15年前

do{
}while()
の場所が違います。

プログラムを添付するときは、
タグを使ってください。

yatta

Re:文字列を用いたプログラム

#5

投稿記事 by yatta » 15年前

返信が遅れて申し訳ございませんでした。やはり、
if(n==0)
という記述はまずいのでしょうか。

do while文はは最初は必ずdoの後に書いてある処理をして、それ以降はwhile()のカッコの中が成り立っている

間、doの後の処理を繰り返すわけですよね。whileのカッコの中にn==0とすべきなのはわかるのですが。

よろしくお願いします。

conio

Re:文字列を用いたプログラム

#6

投稿記事 by conio » 15年前

-----------------------------------------------------------------------------
if(n==0) 
{
   do{ 
      printf("文字列がCを含んでいません。改めて文字列の入力をどうぞ。\n"); 
      scanf("%s",str); 
   }while(n==0); 
}
-----------------------------------------------------------------------------
まず、nの値が0の時にdo while文が実行されます。
そして、そのdo while文は「nが0だったら繰り返す」ようになってます。

nの値を変更する箇所は何処にもないので、nの値はずっと0。
よって永久にdo while文を実行する事になります。
また、Cを含んでいるか?を調べるコードも無いので、無意味な無限入力になってます。


「Cを含む文字列が入力されるまでループ」というのはこんな感じで良いのではないでしょうか。
--------------------------
while(1){
//入力処理
  
  if(Cが含まれていれば)
    break;
}
--------------------------

non

Re:文字列を用いたプログラム

#7

投稿記事 by non » 15年前

もう一度No:42154 のプログラムを見ました。
>Cを含んだ文字列を入力したにも関わらず、「文字列がCを含んでいません。改めて文字列の入力をどうぞ」と出てきます。
そんなはずはありません。
Cを大文字でちゃんと入力したでしょうか?

yatta

Re:文字列を用いたプログラム

#8

投稿記事 by yatta » 15年前

nonさんへ

返事が遅れて申し訳ありません。

Cは大文字で入力しています。

yatta

Re:文字列を用いたプログラム

#9

投稿記事 by yatta » 15年前

conioさんへ

conioさんの意見を参考にして、改良してみましたが未だ現状は改善されません。前と同じ状態です。以下のプログラムはn=0のとき(つまり、文字列のうちのCの個数が0のとき)文字列を入力させる無限ループを作り、そうでない場合は直接文字列だけを表示させるプログラムのつもりです。


[/pre]#include<stdio.h>

int main(void)

{
char *p,str[1000000];

int i,n=0;

printf("Cを含む文字列を入力してください。\n\n");

scanf("%s",str);


for(p=str;*p!='\0';p++)

{

if(*p=='C'){

printf("%s\n",p);

n++;

}
}


if(n==0)

{

while(1){

printf("文字列がCを含んでいません。改めて文字列の入力をどうぞ。\n");

scanf("%s",str);

}
}
else{

printf("%s\n\n",p);
}


return 0;

}
[/pre]

yatta

Re:文字列を用いたプログラム

#10

投稿記事 by yatta » 15年前

nonさんkonioさん、アドバイスをありがとうございました。
アドバイスを参考にして、while(1)やdo while文を使わずにフラグを立てておくやり方で解決できました。
正常にCを含む文字列を入力したら、ループから抜け出せる状態になり、問題は解決できました。

これからも頑張ります。

閉鎖

“C言語何でも質問掲示板” へ戻る