@[LAOLIU888](/user/977725)
```cpp
#include <bits/stdc++.h>
using namespace std;
int main(){
char a,b,c,d,e,f,g,h,i,j;
int x;
scanf("%c-%c%c%c-%c%c%c%c%c-%c",&a,&b,&c,&d,&e,&f,&g,&h,&i,&j);
x=((int(a)-48)*1+(int(b)-48)*2+(int(c)-48)*3+(int(d)-48)*4+(int(e)-48)*5+(int(f)-48)*6+(int(g)-48)*7+(int(h)-48)*8+(int(i)-48)*9)%11;
if((x==10)&&(j=='X'))
{
printf("Right");
return 0;
}
if((x==10)&&(j!='X'))
{
printf("%c-%c%c%c-%c%c%c%c%c-%c",a,b,c,d,e,f,g,h,i,'X');
return 0;
}
if(x==int(j)-48)
{
printf("Right");
return 0;
}
else
{
printf("%c-%c%c%c-%c%c%c%c%c-%d",a,b,c,d,e,f,g,h,i,x);
return 0;
}
return 0;
}
```
by midsummer_zyl @ 2023-07-09 20:38:08
1. 输入读取错误:在代码中,你使用了一些字符数组和循环来读取输入的ISBN号码。然而,根据题目描述,ISBN号码的格式是"x-xxx-xxxxx-x",其中符号"-"是分隔符。你应该使用字符类型的变量来逐个读取并处理每个字符,而不是使用字符数组。正确的输入读取方式应该是类似这样的:`cin >> justin >> ji >> jin >> pp;`。
2. 数字转换错误:在计算识别码时,你将输入的字符转换为数字存储在`ibsn`数组中。然而,你使用了`long long`类型的循环索引变量,而实际上这个索引应该是从1到9,超出了数组的有效索引范围。修改循环索引的类型为`int`并将索引范围改为`1`到`9`。
3. 输出格式错误:在输出结果时,你使用了多余的循环和打印语句来构建输出的ISBN号码。实际上,你只需要按照指定的格式输出正确的ISBN号码即可。可以直接使用`cout`语句输出正确的ISBN号码。
以下是修改后的代码:
```cpp
#include <iostream>
using namespace std;
int main()
{
char justin, ji, jin, pp;
int ibsn[9];
int pd, sum = 0;
cin >> justin >> ji >> jin >> pp;
if (pp >= '0' && pp <= '9')
pd = pp - '0';
else
pd = 10;
for (int i = 1; i <= 9; i++)
{
cin >> ibsn[i];
sum += ibsn[i] * i;
}
sum %= 11;
if (sum == pd)
{
cout << "Right";
}
else
{
cout << justin << "-" << ji << jin << "-";
for (int i = 1; i <= 9; i++)
{
cout << ibsn[i];
}
cout << "-" << sum;
}
return 0;
}
```
by chenfeizhou @ 2023-07-09 20:41:09
@[midsummer_zyl](/user/1025321) @[chenfeizhou](/user/731596) 谢谢你们的援助
by TUHAOWENNS @ 2023-07-10 13:32:24