如何在c中进行while循环

时间:2012-05-23 13:30:16

标签: c while-loop

我试图在我的C代码中进行while循环

像这样:

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

但是当我输入字符“q”时......控制台崩溃了

并停止工作

我在while循环中出错了什么?

6 个答案:

答案 0 :(得分: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);
    } 
}

答案 1 :(得分: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'
  7. 所以你可能需要的是:

    #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;
    }
    

    P.S。我想要构建一个格式字符串以避免重复3,但我的懒惰赢了。

答案 2 :(得分:1)

使用scanf("%s",&q);代替scanf("%s",q);

您未在'q'函数中传递scanf变量的地址。

答案 3 :(得分:1)

你有很多错误。 1. char只是一个字符 - 实际上它实际上是一个数字 你用单引号写'是'。这给出了一个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
}
}

这可能对你有用。我手头没有c编译器,所以我无法测试它。

}

};

答案 4 :(得分:1)

没有q的地址,请尝试添加&amp;在q之前,添加一个strcmp(a,“yes”)来正确评估表达式。

答案 5 :(得分:0)

class WhileLoopExample {
     public static void main(String args[]){
        int i=10;
        while(i>1){
          System.out.println(i);
          i--;
        }
     }
}