简单程序省略的第一个字符
First char omitted by simple programm
任务是cin>>....
,只取字母,将大写字母改为小写字母,并只用小写字母重写行。我不明白为什么我的代码会忽略输入的第一个字母。
#include <iostream>
#include <cctype>
using namespace std;
int main()
{
char ch;
cin >> ch;
while (ch != '@'){
if (cin.get(ch))
{
if (isalpha(ch)){
if (isupper(ch)){
cout <<(char)tolower(ch);
}
else
cout << ch;
}
if (ch == '\n')
cout << "\nNie zakonczyles ciagu znakiem @" << endl;
}
else{
cin.clear();
}
}
}
因为就在 cin >> ch;
之后你正在做 cin.get(ch)
。
cin >> ch; <- read first letter
while (ch != '@'){
if (cin.get(ch)) <- read next letter which tosses out the first letter
将此集合 ch
固定为某个值,然后删除 cin >> ch;
因为循环使用cin.get(ch)
来获取要打印的字符,但实际上是用cin >> ch
读取第一个字符;然后结果被丢弃。
您可能希望摆脱 cin>>ch;
指令并将 ch
初始化为不同于 '@'
的值,或者将循环转换为 do-while
循环,与此类似:
char ch;
do
{
if (cin.get(ch))
{
/* Do what is needed */
}
}
while (ch != '@')
任务是cin>>....
,只取字母,将大写字母改为小写字母,并只用小写字母重写行。我不明白为什么我的代码会忽略输入的第一个字母。
#include <iostream>
#include <cctype>
using namespace std;
int main()
{
char ch;
cin >> ch;
while (ch != '@'){
if (cin.get(ch))
{
if (isalpha(ch)){
if (isupper(ch)){
cout <<(char)tolower(ch);
}
else
cout << ch;
}
if (ch == '\n')
cout << "\nNie zakonczyles ciagu znakiem @" << endl;
}
else{
cin.clear();
}
}
}
因为就在 cin >> ch;
之后你正在做 cin.get(ch)
。
cin >> ch; <- read first letter
while (ch != '@'){
if (cin.get(ch)) <- read next letter which tosses out the first letter
将此集合 ch
固定为某个值,然后删除 cin >> ch;
因为循环使用cin.get(ch)
来获取要打印的字符,但实际上是用cin >> ch
读取第一个字符;然后结果被丢弃。
您可能希望摆脱 cin>>ch;
指令并将 ch
初始化为不同于 '@'
的值,或者将循环转换为 do-while
循环,与此类似:
char ch;
do
{
if (cin.get(ch))
{
/* Do what is needed */
}
}
while (ch != '@')