这个程序哪里有问题?

include <stdio.h>

include <string.h>

int main(void)
{
char p[13];
scanf("%s",&p);
char a[13];
strcpy(a,p);

int i,sum=0,k=1;
for(i=0;i<=10;i++)
{

if (p[i]=='-')
continue;
p[i]-='0';
printf("%d\n",p[i]);

sum+=k*p[i];
k++;

}
printf("%d",sum%11);

return 0;
}`运行后为何第一个0变成了-48? 其他0都是转换成功了
输入的是类似0-670-82162-4的出版号

阅读 1.9k
2 个回答

scanf("%s",p),你多了个&

在我的gcc6.1.0上运行原代码

#include <stdio.h>
#include <string.h>
int main(void)
{
  char p[13];
  scanf("%s",&p);
  char a[13];
  strcpy(a,p);
  int i,sum=0,k=1;
  for(i=0;i<=10;i++)
  {
    if (p[i]=='-')
      continue;
    p[i]-='0';
    printf("%d\n",p[i]);
    sum+=k*p[i];
    k++;
  }
  printf("%d",sum%11);
  return 0;
}

所用编译命令 gcc myfirst.c -o myfirst.exe myfirst.c是我保存的代码文件
运行结果无误
图片描述

另外,代码也不要用i<=10写死判断,因为输入的字符串不一定就会有那么长
不妨改成int len=strlen(p),在for语句中i<len稍微好一点
完整代码如下

#include <stdio.h>
#include <string.h>
int main(void)
{
  char p[13];
  scanf("%s",&p);
  char a[13];
  strcpy(a,p);
  int i,sum=0,k=1;
  int len=strlen(p);
  for(i=0;i<len;i++)
  {
    if (p[i]=='-')
      continue;
    p[i]-='0';
    printf("%d\n",p[i]);
    sum+=k*p[i];
    k++;
  }
  printf("%d",sum%11);
  return 0;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进