c - 虽然循环在 C 中无法正常工作

标签 c while-loop scanf infinite-loop

此程序中的循环意外终止。当我使用输入 t=4 和 s="qi"进行测试时,程序运行时打印的 t 值是 0 而不是预期值 4。出了什么问题?

#include<stdio.h>

int main()
{
    int t,flag=0;
    char s[2];
    scanf("%d ",&t);
    while(t)
    {
        scanf("%s",s);
        if(s[1]=='i')
        {
            if(flag==0)
                flag=1;
            else
                flag=0;
        }
        else if(s[1]=='b')
        {

        }
        else if(s[1]=='r')
        {

        }
        printf("%d\n",t);
        t=t-1;
    }
}

最佳答案

数组 s 的大小为 2。这意味着它只能容纳一个字符。你输入两个字符,“qi”,空终止符被写入相邻的内存中,覆盖那里的任何内容。

这将导致未定义的行为。你运气不好,显然覆盖了变量 t 的第一个字节,这将在小端机器上将其设置为 0(在你的情况下)。

解决方案是将字符串扩大到至少 3 个元素,并将 scanf() 中的输入限制为最多两个字符。

关于c - 虽然循环在 C 中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26831699/

相关文章:

c - 使用通用函数查找最大值

自定义 getline() 实现 - for 在 while 循环内

C fscanf 和指针

python - while 循环的问题(python 基础)

javascript - WHILE 循环内的 GM_xmlhttpRequest

在我使用 quit 命令之前 C 不会运行

c - 在 c 中使用 fscanf() 时变量被更改

c - C函数在char [] segfaults中交换两个char,尽管不使用字符串文字

c - 仅包含标识符的表达式会读取 volatile 变量吗?

while-loop - Golang 保持功能活跃