2

私のCコードでwhileループを作ろうとしています

このような:

main()
{
char q ;
while( a == 'yes' )   
{
    /* my code */
    printf("enter no to exit or yes to continue");
    scanf("%s",q);
 } 
}

しかし、文字「q」を入力すると....コンソールがクラッシュします

そして働くのをやめる

whileループで何が間違っていますか??

4

6 に答える 6

6

文字列を と比較することはできませんa == 'yes'。関数を使用する必要がありstrcmpます。

次のようなものが必要です。

int main(int argc, char **argv)
{
    char a[200];
    strcpy(a, "yes");
    while( !strcmp(a, "yes") )
    {
       /* my code */
       printf("enter no to exit or yes to continue");
       scanf("%s",a);
    } 
}
于 2012-05-23T13:31:35.153 に答える
5

いくつかのエラーがあります:

  1. 文字列リテラルは二重引用符で囲む必要があります: "yes"、ではありません'yes'
  2. 文字列リテラルは文字変数と比較できません。
  3. scanf変数のアドレスが必要です: scanf("%s", &q)、ではありませんscanf("%s", q)
  4. char q[4]どうやら、文字 1 ( ) ではなく、配列変数 ( ) が必要なようですchar q
  5. a条件で参照される変数while( a == 'yes')が宣言されていません。
  6. '\n'が印刷されるまでメッセージがバッファリングされるため、メッセージは画面に表示されません。

したがって、おそらく必要なのは次のとおりです。

#include <stdio.h>
#include <string.h>

#define INP_SIZE 3
int main() {
    char inp[INP_SIZE + 1] = { 0 };
    while (strcmp(inp, "yes")) {
        printf("enter yes to continue or whatever else to exit\n");
        scanf("%3s", inp);
    }
    return 0;
}

PS の重複を避けるためにフォーマット文字列を作成することを考えました3が、私の怠惰が勝ちました。

于 2012-05-23T13:35:19.583 に答える
1

q のアドレスがありません。q の前に & を追加し、strcmp(a, "yes") を追加して、式を適切に評価してください。

于 2012-05-23T13:41:22.247 に答える
1

あなたにはいくつかの間違いがあります。1. char は 1 文字にすぎません - 実際には数字です 2. 一重引用符を使用して 'yes' と書きます。これにより char 型が与えられ、一重引用符で囲まれた単一の文字のみを持つ必要があります。例: 'y' 3. C では、文字列は char の配列として保持され、整数のように単純に比較することはできません。

私はこれをチェックしていませんが、次のようなものを試してください:

main() {
char buf[255]; //Set up an array of chars to hold the string
buf[0] = '/0'; //set the first charactory in the array to a null charactor.
               //c strings are null terminated so this sets it to an empty string

while ( strcmp(buf,"yes")==0) { //we have to use the strcmp function to compare the array
                                //also yes in double quotes is a null terminated char array so
printf("enter no to exit or yes to continue:"); //looks better with a colon
scanf("%s",buf); //scan f function will fill the buffer with a null terminated array
printf("\n"); //a new line here is nice
}
}

それはあなたのために働くかもしれません。ac コンパイラを手元に持っていないので、テストできません。

}

};

于 2012-05-23T13:37:28.353 に答える
1

scanf("%s",&q);の代わりに使用 しscanf("%s",q);ます。

'q'関数で変数のアドレスを渡していませんscanf

于 2012-05-23T13:36:27.447 に答える
0
class WhileLoopExample {
     public static void main(String args[]){
        int i=10;
        while(i>1){
          System.out.println(i);
          i--;
        }
     }
}
于 2016-10-28T16:17:29.813 に答える