ページ 1 / 1
文字列を用いたプログラム
Posted: 2009年11月14日(土) 14:33
by yatta
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;
}
Re:文字列を用いたプログラム
Posted: 2009年11月14日(土) 15:34
by non
どこかに
do{
と
}while(n==0);
を入れてみましょう。
Re:文字列を用いたプログラム
Posted: 2009年11月16日(月) 11:37
by yatta
早速のお返事をありがとうございます。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;
}
Re:文字列を用いたプログラム
Posted: 2009年11月16日(月) 16:24
by non
do{
}while()
の場所が違います。
プログラムを添付するときは、
タグを使ってください。
Re:文字列を用いたプログラム
Posted: 2009年11月19日(木) 12:05
by yatta
返信が遅れて申し訳ございませんでした。やはり、
if(n==0)
という記述はまずいのでしょうか。
do while文はは最初は必ずdoの後に書いてある処理をして、それ以降はwhile()のカッコの中が成り立っている
間、doの後の処理を繰り返すわけですよね。whileのカッコの中にn==0とすべきなのはわかるのですが。
よろしくお願いします。
Re:文字列を用いたプログラム
Posted: 2009年11月19日(木) 12:22
by conio
-----------------------------------------------------------------------------
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;
}
--------------------------
Re:文字列を用いたプログラム
Posted: 2009年11月19日(木) 12:22
by non
もう一度No:42154 のプログラムを見ました。
>Cを含んだ文字列を入力したにも関わらず、「文字列がCを含んでいません。改めて文字列の入力をどうぞ」と出てきます。
そんなはずはありません。
Cを大文字でちゃんと入力したでしょうか?
Re:文字列を用いたプログラム
Posted: 2009年11月24日(火) 09:44
by yatta
nonさんへ
返事が遅れて申し訳ありません。
Cは大文字で入力しています。
Re:文字列を用いたプログラム
Posted: 2009年11月24日(火) 10:39
by yatta
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]
Re:文字列を用いたプログラム
Posted: 2009年12月01日(火) 11:00
by yatta
nonさんkonioさん、アドバイスをありがとうございました。
アドバイスを参考にして、while(1)やdo while文を使わずにフラグを立てておくやり方で解決できました。
正常にCを含む文字列を入力したら、ループから抜け出せる状態になり、問題は解決できました。
これからも頑張ります。