我正在尝试编写一个程序,将每个单词的一个字母转换为大写。 argv[1]
是一个类似3的数字。如果argv[1]
是3
,则每个单词的第三个字母应为大写,其他单词应为小写。
我写了这样的代码灾难,它陷入了一个无限循环,该循环仅重复显示第一个输入字符。
我需要逻辑上的帮助。
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int c; // yes, read chars in as ints.
int ncounter = atoi(argv[1]);
int cchecker = 0;
c = cin.get();
while (!cin.eof())
{
if (c == ' ')
{
cchecker = 0;
}
else
{
if (cchecker == ncounter)
{
c = (toupper(c));
cchecker++;
}
else
{
c = (tolower(c));
cchecker++;
}
}
cout.put('\n'); // sometimes this is needed: you'll know when
}
}
更新这是新的代码,它几乎可以完美地工作,除了它有时不会将第一个单词大写,有点奇怪。
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
int main (int argc, char *argv[])
{
int c ; // yes, read chars in as ints.
int ncounter = atoi(argv[1]);
int cchecker = 0;
c = cin.get() ;
while (!cin.eof())
{
if (c == ' ')
{
cchecker = 0;
cout.put (c);
c = cin.get ();
cchecker++;
}
else
{
if (cchecker == ncounter)
{
cout.put (toupper(c));
c = cin.get() ;
cchecker++;
}
else
{
cout.put (tolower(c));
c = cin.get() ;
cchecker++;
}
}
}
cout.put('\n') ; // sometimes this is needed: you'll know when
}
答案 0 :(得分:2)
while (!cin.eof())
您的循环条件表明,如果在上次迭代中设置了标准输入流(由std::cin
对象表示)的eofbit,则循环结束。当那里没有更多字符时,将在从标准输入读取时设置Eofbit。
它陷入了无限循环
您的循环永远不会从标准输入中读取数据,因此循环条件的状态永远不会改变。如果进入循环,它将永远不会停止。
答案 1 :(得分:0)
正如其他人所述,进入循环之前,您只能读std::cin
一次,因此您陷入了无限循环,因为您再也不会在循环内调用cin.get()
了,所以{{ 1}}有机会改变价值。不过,您应该考虑使用cin.eof()
而不是while (cin.get(ch))
。
但是,为什么您一次要从while (!cin.eof())
读一个std::cin
?您说要更改单词中的字母,因此您应该阅读整个单词,而不是单个字符。
尝试在循环中使用char
来读取整个单词,替换该单词中的第N个operator>>
,例如:
char