关于一个循环输入字符串数组的小黑洞

昨天的总结写到:

新学会了一种的代码的新写法:

 

    k=0;
     
    等价:dif[k++] = a[i]   //一步到位实现了   k++  先dif[k]  再k++
     
    等价:dif[k] = a[i] ;k++  

但实际上这样写回出现一个小黑洞:

今天在做   练习7-11 字符串逆序 (15 分) 题时用上述写法 答题 会出现莫名其妙的空行 (我叫它黑洞!)

上代码!

#include <stdio.h>

int main (){
    int k=0;
    char a[80];
    while((a[k++]=getchar()) != '\n') ;
    // a[k]='\0';
    
    for(int i=k-1 ;i>=0 ;i--  )
        printf("%c",a[i]);
        
    printf("\n");
    for(int i=0 ;i<k;i++)
        printf("现在时第%d个位置:a[%d]==%c\n",i+1,i,a[i]);
    printf("逆转结束");
    return 0;
}

输出结果:

$ cpp main.c -o main.ii
$ cc main.ii -o main
$ ./main
0123456789  //输入的10个数
            // 多出来的空行
9876543210  //逆转
现在时第1个位置:a[0]==0
现在时第2个位置:a[1]==1
现在时第3个位置:a[2]==2
现在时第4个位置:a[3]==3
现在时第5个位置:a[4]==4
现在时第6个位置:a[5]==5
现在时第7个位置:a[6]==6
现在时第8个位置:a[7]==7
现在时第9个位置:a[8]==8
现在时第10个位置:a[9]==9
现在时第11个位置:a[10]==      //因为循环结束的时候k=10  此时没有数据
              // 多出来的空行
逆转结束Program exited with status 0

多出来了两个黑洞!

修改代码后:变成常规写法后:

$ ./main
0123456789
9876543210
现在时第1个位置:a[0]==0
现在时第2个位置:a[1]==1
现在时第3个位置:a[2]==2
现在时第4个位置:a[3]==3
现在时第5个位置:a[4]==4
现在时第6个位置:a[5]==5
现在时第7个位置:a[6]==6
现在时第8个位置:a[7]==7
现在时第9个位置:a[8]==8
现在时第10个位置:a[9]==9
逆转结束Program exited with status 0    //输出结果就很 清爽和紧凑

具体为什么,现在还搞不清楚!2021/4/20

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值