C 程序没有循环

C 程序没有循环,c,while-loop,choice,C,While Loop,Choice,我试图让程序打印出“OK”,只要我在末尾输入“y”作为选项,但它不是循环,它只是打印出“OK”并结束程序,即使我在末尾输入了“y”。请帮忙 #include <stdio.h> int main() { char c = 'y'; while (c == 'y') { printf_s("OK\n"); scanf_s("%c", &c); if (c != 'y') {

我试图让程序打印出“OK”,只要我在末尾输入“y”作为选项,但它不是循环,它只是打印出“OK”并结束程序,即使我在末尾输入了“y”。请帮忙

#include <stdio.h>
int main()
{
    char c = 'y';
    while (c == 'y')
    {
        printf_s("OK\n");
        scanf_s("%c", &c);
        if (c != 'y')
        {
            break;
        }
    }
    return 0;
}
#包括
int main()
{
字符c='y';
而(c='y')
{
printf_s(“OK\n”);
scanf_s(“%c”和“&c”);
如果(c!=“y”)
{
打破
}
}
返回0;
}

在第一次迭代中,按Enter键时,一个换行符
\n
y
一起传递到输入。在第二次迭代时,scanf\u s读取
\n
。 改变

scanf_s("%c", &c);  


%c
说明符前面的空格可以使用任意数量的空白字符。

在第一次迭代中,当您按Enter键时,一个换行字符
\n
将与
y
一起传递到输入。在第二次迭代时,scanf\u s读取
\n
。 改变

scanf_s("%c", &c);  


%c
说明符前面的空格可以使用任意数量的空格字符。

%c
前面放置空格可以跳过空格。

%c
前面放置空格可以跳过空格。

更改
扫描行,如下所示

scanf_s("%c", &c, 1);
while (c == 'y')
{
    printf_s("OK\n");
    scanf_s("%c", &c, 1);
}
此额外参数指定
c
参数的大小。纯旧的
scanf
不需要此参数,但以
\u s
结尾的版本需要此参数

另外,带有
break
语句的
if
块是不必要的,因为
while
循环上的条件有效地执行相同的操作。可以这样写

scanf_s("%c", &c, 1);
while (c == 'y')
{
    printf_s("OK\n");
    scanf_s("%c", &c, 1);
}

更改
scanf_s
行,如下所示

scanf_s("%c", &c, 1);
while (c == 'y')
{
    printf_s("OK\n");
    scanf_s("%c", &c, 1);
}
此额外参数指定
c
参数的大小。纯旧的
scanf
不需要此参数,但以
\u s
结尾的版本需要此参数

另外,带有
break
语句的
if
块是不必要的,因为
while
循环上的条件有效地执行相同的操作。可以这样写

scanf_s("%c", &c, 1);
while (c == 'y')
{
    printf_s("OK\n");
    scanf_s("%c", &c, 1);
}

你对scanf的看法是错误的

如果你像这样使用,你会看到它正在工作

       #include <stdio.h>

int main()
{
    int c = 1;
    while (c == 1)
    {
        printf_s("OK\n");
        scanf_s("%d", &c);
        if (c != 1)
        {
            printf_s("hello\n");
                continue;
        }

    }
    return 0;
}
#包括
int main()
{
int c=1;
而(c==1)
{
printf_s(“OK\n”);
scanf_s(“%d”和“&c”);
如果(c!=1)
{
printf_s(“hello\n”);
持续
}
}
返回0;
}

您对scanf的看法是错误的

如果你像这样使用,你会看到它正在工作

       #include <stdio.h>

int main()
{
    int c = 1;
    while (c == 1)
    {
        printf_s("OK\n");
        scanf_s("%d", &c);
        if (c != 1)
        {
            printf_s("hello\n");
                continue;
        }

    }
    return 0;
}
#包括
int main()
{
int c=1;
而(c==1)
{
printf_s(“OK\n”);
scanf_s(“%d”和“&c”);
如果(c!=1)
{
printf_s(“hello\n”);
持续
}
}
返回0;
}

好的,我用scanf代替scanf\s,解决了问题,谢谢大家。

好的,我用scanf代替scanf\s,解决了问题,谢谢大家。

在scanfy之前,您正在使用windows系统。您可能需要检查。确定fflush(stdin)当我希望保持循环运行时,您在扫描之前使用windows系统,您可能需要检查。确定fflush(stdin)当我想保持循环运行时,这一点很有帮助。
scanf\u s
方法要求所有存储位置后面都有一个显式大小。
scanf\u s
方法要求所有存储位置后面都有一个显式大小。他对scanf没有“错”。你可以扫描一个角色。他在用scanf_s扫描一个角色。将其更改为int不能帮助他解决扫描没有必要的第三个参数的问题。他不是“你错在scanf上了”,我说如果他使用%c编译器也将新行作为字符读取,那么他是在错误地使用它。这就是他使用错误的原因!然后给你的答案加上更多的解释,而不是简单地说“错”。他对scanf没有“错”。你可以扫描一个角色。他在用scanf_s扫描一个角色。将其更改为int不能帮助他解决扫描没有必要的第三个参数的问题。他不是“你错在scanf上了”,我说如果他使用%c编译器也将新行作为字符读取,那么他是在错误地使用它。这就是他使用错误的原因!然后对你的答案添加更多解释,而不是简单地说“错”。如果你想继续使用
scanf_s
请参阅我的答案,因为它纠正了htis API的使用如果你想继续使用
scanf_s
请参阅我的答案,因为它纠正了htis API的使用