C语言 这段代码有什么问题......在我输入t后,它不接受输入

vngu2lb8  于 2023-02-07  发布在  其他
关注(0)|答案(2)|浏览(136)
#include<stdio.h>

void main()
{

    int t,i=0;
    scanf("%d",&t);
    
    while(t--)
    {
        char c;
        scanf("%c",&c);
        char s[10]="codeforces";
        
        while(s[i]!='\0')
        {
            if(s[i]==c)
            printf("YES\n");
            
            else
            printf("NO\n");
            
            i++;
        }
    }

}

我尝试了10个测试用例,但输出为10次否

r8xiu3jd

r8xiu3jd1#

对于符合C标准的启动器,不带参数的函数main应声明如下

int main( void )

在调用scanf之后

scanf("%d",&t);

输入缓冲器存储对应于按下的回车键的新的行字符'\n'
下一次调用scanf

scanf("%c",&c);

会自动读取新的行字符'\n'
要跳过输入缓冲区中白色字符,需要在格式字符串中放置前导空格字符,如

scanf(" %c",&c);
      ^^^^

另外,一旦在字符串中找到输入的字符,内部while循环应该立即中断,消息应该在while循环之后输出,并且变量i在外部while循环中没有设置为0,所以代码有一个逻辑数组,您应该在最小范围内声明变量。
删除此行中i的声明

int t,i=0;

并按照以下方式重写while循环

size_t i = 0;
    while ( s[i] !='\0' && s[i] != c ) ++i;

    if ( s[i] != '\0' )
    {
        printf("YES\n");
    }
    else
    {
        printf("NO\n");
    }

在整个程序可以看,例如以下方式.

#include <stdio.h>

int main( void )
{
    unsigned int t;

    if ( scanf( "%u", &t ) == 1 )
    {
        while ( t-- )
        {
            const char *s = "codeforces";
            char c;

            scanf( " %c", &c );
        
            size_t i = 0;
        
            while ( s[i] != '\0' && s[i] != c ) ++i;

            if ( s[i] != '\0' )
            {
                puts( "YES" );
            }
            else
            {
                puts( "NO" );
            }    
        }
    }
}
bsxbgnwa

bsxbgnwa2#

包括<stdio.h>

空干管(){

int t,i=0;
scanf("%d",&t);

while(t--)
{
    char c;
    scanf(" %c",&c);  // note the addition of a space character before the %c format specifier
    char s[10]="codeforces";
    
    while(s[i]!='\0')
    {
        if(s[i]==c)
        printf("YES\n");
        
        else
        printf("NO\n");
        
        i++;
    }
}

}检查这个

相关问题