【问题标题】:Output is printing twice, why?输出打印两次,为什么?
【发布时间】:2022-11-21 21:18:13
【问题描述】:

该程序旨在从输入的 ISBN 代码中删除“-”,例如。输入“978-123456-789”,输出“978123456789”。相反,我得到的是“978123456789978123456789”——它打印了两次。有人可以向我解释为什么吗?谢谢

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

int main(void)
{
    char ISBN[16], arrayClean[12];
    int i,j,k,a;

    printf("Enter your ISBN: ");
    scanf("%s",&ISBN);

    for(i=0; i<=13; i++)
    {
        a = ISBN[i] - 48;
        if(a==-3)
        {
            for(j=i;j<=13;j++)
            {
                k++;
                ISBN[j]=ISBN[j+1];
            }
            k=0;
            i=0;
        }
    }

    for(i=0; i<=11; i++)
        arrayClean[i]=ISBN[i];

    printf("%s",arrayClean);


    return 0;
}

【问题讨论】:

  • 您是否使用调试器单步执行程序以查看每个变量的值?
  • 字符串结束的标志是什么?你在程序的什么地方设置它?
  • scanf("%s", &ISBN) 是错误的。它应该是 scanf("%s", ISBN)。变量“k”的用途是什么?为什么要对 48 进行奇怪且毫无意义的减法并与 -3 进行比较?只需与'-'进行比较。很多“神奇的数字”。 16、12、13、11。
  • 如果删除最后一个printf 会发生什么?
  • 如果你只有int main(){getchar();return 0;}会发生什么具有相同的输入

标签: c


【解决方案1】:

您似乎有 12 个字符(不包括虚线。14 个字符)。

因此,您的循环无法处理输出的字符 0 到 11,以及输入的字符 0 到 13。那就是忘记了终端 '

【解决方案2】:

您不是 null 终止字符串。您只是将 12 个字符从 ISBN 复制到 arrayClean。您需要在arrayClean 的末尾添加一个空终止符。您可以通过添加 arrayClean[12] = ' 来完成此操作

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-19
  • 2015-04-21
  • 1970-01-01
  • 2021-06-21
  • 2022-12-08
相关资源
最近更新 更多