我已经做了很长一段时间了,现有的答案几乎没有什么帮助。我对编程很陌生,并试图编写我的程序的一个子部分,它试图检查任何给定的输入是否完全由字母组成。
为此,我的想法是通过isalpha函数传递整个数组,方法是使用循环一次传递每个字符。这个想法合乎逻辑,但我在句法上遇到了实现它的困难。我将非常感谢任何帮助!
下面是我的密码-
printf("Please type the message which needs to be encrypted: ");
string p = GetString();
for (int i = 0, n = strlen(p); i < n; i++)
{
if(isalpha(**<what I'm putting here is creating the problem, I think>**) = true)
{
printf("%c", p[i]);
}
}发布于 2014-06-03 07:13:17
您应该按照以下方式修改代码(假设您自己定义了字符串类型):
printf("Please type the message which needs to be encrypted: ");
string p = GetString();
for (int i = 0, n = strlen(p); i < n; i++)
{
if(isalpha(p[i]) == true) // HERE IS THE ERROR, YOU HAD =, NOT ==
{
printf("%c", p[i]);
}
}操作符=用于赋值,运算符==用于比较!
那到底发生了什么?不管p[i]是什么,这项任务都是正确的。
正如昆廷所提到的:
if(isalpha(p[i]) == true)
如果像这样写的话,可能会更优雅和错误:
if(isalpha(p[i]))
下面是C中的一个示例:
/* isalpha example */
#include <stdio.h>
#include <ctype.h>
int main(void)
{
int i = 0;
char str[] = "C++";
while (str[i]) // strings in C are ended with a null terminator. When we meet
// the null terminator, while's condition will get false.
{
if (isalpha(str[i])) // check every character of str
printf ("character %c is alphabetic\n",str[i]);
else
printf ("character %c is not alphabetic\n",str[i]);
i++;
}
return 0;
}来源
参考 of isalpha().
提示:下次把你的代码按原样发布!
正如Alter注意到的那样,使用它是很好的:
isalpha((unsigned char)str[i])
在你的代码中
isalpha((unsigned char)p[i])
为了安全原因。
发布于 2014-06-03 07:12:06
您的例子是这里。
例如,isalpha()的参数是字符串p的第一个字符。唯一的问题是如何访问第一个字符。通常你可以使用。也就是说,只需使用以下代码:isalpha(p[i]) (我看到您已经在printf调用中使用了[] )。
另外,isalpha(p[i]) = true是错误的条件。看起来您计划检查isalpha(p[i]) == true (可以跳过== true)。
发布于 2017-02-13 10:42:29
晚了,但:
其他两个答案都说省略是可取的,但不要说对于可移植性是必要的。
返回“逻辑”值的C核心语言操作符== != < <= > >= && ||使用int值1表示true,0表示false。在C99和upwithstdbool.h中,按照惯例,true为1,false为0,因此,例如if( (a < b) == true )将正确工作,尽管它是多余的,而且许多人(包括我)认为它的风格很差。测试逻辑值的语言元素,即if(c) while(c) for(;c;)和&& ||的操作数和左操作数到?:的操作数,认为任何比较等于0的值都是假的,任何其他值都是真的。
ctype.h中的字符分类例程以及其他一些标准库例程(如feof(f)和ferror(f) )被指定为返回非零int表示true,0( int)表示false,在许多实现中,用于true的非零值并不是(总是) 1。在这种情况下,isalpha(whatever) == true可能导致测试,比如4 == 1,即使whatever是一个字母字符也会失败。OTOH、isalpha(...) != false或isalpha(...) != 0确实可以正常工作,如果您真的想要写一些显式的东西。
https://stackoverflow.com/questions/24009010
复制相似问题