|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
这样运行系统报错了,应怎么改
题目:编写一个程序,输入一个字符串,输出其中每个字符在字母表中的序号。对于不是英文字时的字符,输出 0。例如:输入为”acbf8g”,输出为 1 3 2 6 0 7
- #include <iostream>
- #include <cstdlib>
- using namespace std;
- int main()
- {
- char str[10];
- cin.getline(str, 10, '\n');
- for (int i = 0; str[i] != '\n'; i++)
- {
- if (isdigit(str[i]))
- cout << " " << "0";
- else if (isalpha(str[i]))
- cout << " " << str[i] - 'a' + 1 ;
- }
- return 0;
- }
复制代码
Thanks♪(・ω・)ノ
问题出在循环的条件判断上。在这段代码中,使用了 cin.getline() 函数来获取输入的字符串,但是它不会将换行符 \n 包含在内。所以在循环条件判断 str[ i] != '\n' 中,永远都无法满足条件,导致循环无法结束,最终导致系统报错。
解决这个问题,可以将循环条件改为判断字符串是否结束,即判断 str[ i] != '\0' 。 \0 是字符串的结束符,表示字符串的结尾。
改正后的代码如下所示:
- #include <iostream>
- #include <cstdlib>
- using namespace std;
- int main()
- {
- char str[10];
- cin.getline(str, 10, '\n');
- for (int i = 0; str[ i] != '\0'; i++)
- {
- if (isdigit(str[ i]))
- cout << " " << "0";
- else if (isalpha(str[ i]))
- cout << " " << str[ i] - 'a' + 1 ;
- }
- return 0;
- }
复制代码
这样修改后,循环会在字符串结束时结束,不会再出现报错的情况。
|
|