基本上,我想只从字母字符中获取用户的输入。但我的代码的这部分似乎总是被跳过。我认为这是条件语句的问题,但我不知道如何解决它。
#include <iostream>
#include <cctype>
int main()
{
char ch[100];
cout << "Please key in a sentence to get\n\n";
for(int i=0;isalpha(ch[i]);i++)
{
ch[i]=getchar();
putchar(ch[i]);
}
return 0;
}
答案 0 :(得分:0)
您的问题在于for
循环的工作方式。这个循环:
for(int i=0;isalpha(ch[i]);i++)
{
ch[i]=getchar();
putchar(ch[i]);
}
执行以下步骤:
i
初始化为0 ch
i
的元素是非字母的,则转到第7步(否则,正常继续)getchar()
的结果分配到ch
的{{1}}元素i
ch
的元素
i
因此,每次检查i
时,您都会将ch[i]
增加到新值。因此,i
将始终在步骤2中未初始化。
为了解决这个问题,我猜你想要重建你的循环,以便在步骤3和5之间的某个地方执行第2步。
答案 1 :(得分:0)
跳过你的for循环,因为在进入循环体之前会评估条件。
它将评估&#39; isalpha(ch [0])&#39;这可能是任何值,因为你没有初始化你的数组(特别是索引0处的字符)。
你可以像这样重写你的for循环,
for ( int i = 0; i < 100; ++i ) {
ch[i] = getchar();
if ( !isalpha( ch[i] ) ) {
break;
}
putchar( ch[i] );
}
答案 2 :(得分:0)
从进一步阅读开始,我意识到它在C ++中不可能立即实现,因为它部分取决于主要是行缓冲的终端。因此,在使用windows进行编译时,包括conio.h和使用_getch()有助于解决此特定问题。
#include <conio.h>
#include <iostream>
int main()
{
char ch[100];
cout << "Please key in a sentence to get\n\n";
for(int i=0;;i++)
{
ch[i]=_getch();
putchar(ch[i]);
if (!isalpha(ch[i]) && ch[i]!=' ') break;
}
return 0;
}