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]),而不是字符一 ( 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

使用 scanf("%s",&q);而不是scanf("%s",q);.

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

于 2012-05-23T13:36:27.447 回答
1

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

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

}

};

于 2012-05-23T13:37:28.353 回答
1

没有 q 的地址,尝试在 q 之前添加 &,并添加 strcmp(a, "yes") 以正确评估表达式。

于 2012-05-23T13:41:22.247 回答
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 回答