两种情况,一个可以正常输入,但一改就不行了??为什么呀?

img

img


异常不能完全输入代码


#include<stdio.h>
int main(){
    char a[101];
    char c;
    int p;
    scanf("%s",&a);
        scanf("%c",&c);
    int o=0;
    for(int i=0;a[i]!='\0';i++){
        if(c==a[i])o++;
    }
    
    for(int i=0;a[i]!='\0';i++){
        if(c==a[i]){
            if(a[i]<a[i+1]){
                p=i;
                break;    
            }
                o--;
            if(o==0){
                    p=i;
                    break;
            }
        }
    }
    for(int i=0;a[i]!='\0';i++){
        if(i!=p)printf("%c",a[i]);
    }
    
    return 0;
}

正常输入

两个代码只有了scanf形式不同
#include<stdio.h>
int main(){
    char a[101];
    char c;
    int p;
    scanf("%s %c",&a,&c);
    int o=0;
    for(int i=0;a[i]!='\0';i++){
        if(c==a[i])o++;
    }
    
    for(int i=0;a[i]!='\0';i++){
        if(c==a[i]){
            if(a[i]<a[i+1]){
                p=i;
                break;    
            }
                o--;
            if(o==0){
                    p=i;
                    break;
            }
        }
    }
    for(int i=0;a[i]!='\0';i++){
        if(i!=p)printf("%c",a[i]);
    }
    
    return 0;
}

img


您这个输入的结构都不一样了,要求输入是 按照 1 2 这种,中间空格间隔,但是使用两个scanf来处理时,无法把标准输入流给赋值进去。

上面的代码里c获得的是个空格呀,空格也是字符呀
你上下代码其实就差一个空格
可以分开写,但是空格别给丢了

这两个,你如果 输入s后, 再输入换行或 空格, c 都会接收的 换行或 空格,自然不会有后续输入了

scanf("%s",&a);
scanf("%c",&c);

// 这种要 输完 ,清理下输入流,或者 getchar()  将 换行和空格吃掉

scanf("%s",&a);
getchar();
scanf("%c",&c);
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632