#include<iostream> #include<string.h> using namespace std; int main() { char isbn[14]; int id_num = 0,count = 1; cin.getline(isbn, 13); for (int i = 0; i<strlen(isbn)-1; i++) { if (isbn[i] != '-') { id_num += (isbn[i]-'0') * (count++); } } id_num = id_num % 11; cout << id_num << endl; char ID = (id_num == 10 ? 'X' : id_num + '0'); if (ID == isbn[13]) { cout << "Right" << endl; } else { isbn[13] = ID; cout << isbn << endl; } }分析这段代码并修改
时间: 2024-01-03 17:03:22 浏览: 129
这段代码的功能是检验输入的 ISBN 码是否合法,如果不合法则自动更正最后一位。
分析:
1. 输入的 ISBN 码长度应该为 13 位,但是 `cin.getline(isbn, 13)` 只会读取前 12 个字符,因此应该改为 `cin.getline(isbn, 14)`。
2. 在循环计算校验码时,应该跳过输入字符串中的横杠字符,因此需要在 `if (isbn[i] != '-')` 中加入一个 continue 语句。
3. 最后输出的 ISBN 码应该包含横杠字符,因此需要在输出语句中添加相应的横杠。
修改后的代码如下:
```c++
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char isbn[14];
int id_num = 0, count = 1;
cin.getline(isbn, 14);
for (int i = 0; i < strlen(isbn) - 1; i++) {
if (isbn[i] != '-') {
id_num += (isbn[i] - '0') * (count++);
}
}
id_num = id_num % 11;
char ID = (id_num == 10 ? 'X' : id_num + '0');
if (ID == isbn[12]) {
cout << "Right" << endl;
} else {
isbn[12] = ID;
cout << isbn[0] << isbn[1] << isbn[2] << '-' << isbn[3] << '-' << isbn[4] << isbn[5] << isbn[6] << isbn[7] << '-' << isbn[8] << isbn[9] << isbn[10] << isbn[11] << '-' << isbn[12] << endl;
}
return 0;
}
```
阅读全文