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:文字列を用いたプログラム
早速のお返事をありがとうございます。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;
}
#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:文字列を用いたプログラム
返信が遅れて申し訳ございませんでした。やはり、
do while文はは最初は必ずdoの後に書いてある処理をして、それ以降はwhile()のカッコの中が成り立っている
間、doの後の処理を繰り返すわけですよね。whileのカッコの中にn==0とすべきなのはわかるのですが。
よろしくお願いします。
if(n==0)という記述はまずいのでしょうか。
do while文はは最初は必ずdoの後に書いてある処理をして、それ以降はwhile()のカッコの中が成り立っている
間、doの後の処理を繰り返すわけですよね。whileのカッコの中にn==0とすべきなのはわかるのですが。
よろしくお願いします。
Re:文字列を用いたプログラム
----------------------------------------------------------------------------- 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:文字列を用いたプログラム
もう一度No:42154 のプログラムを見ました。
>Cを含んだ文字列を入力したにも関わらず、「文字列がCを含んでいません。改めて文字列の入力をどうぞ」と出てきます。
そんなはずはありません。
Cを大文字でちゃんと入力したでしょうか?
>Cを含んだ文字列を入力したにも関わらず、「文字列がCを含んでいません。改めて文字列の入力をどうぞ」と出てきます。
そんなはずはありません。
Cを大文字でちゃんと入力したでしょうか?
Re:文字列を用いたプログラム
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]
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:文字列を用いたプログラム
nonさんkonioさん、アドバイスをありがとうございました。
アドバイスを参考にして、while(1)やdo while文を使わずにフラグを立てておくやり方で解決できました。
正常にCを含む文字列を入力したら、ループから抜け出せる状態になり、問題は解決できました。
これからも頑張ります。
アドバイスを参考にして、while(1)やdo while文を使わずにフラグを立てておくやり方で解決できました。
正常にCを含む文字列を入力したら、ループから抜け出せる状態になり、問題は解決できました。
これからも頑張ります。