我以为我修复了我的代码所以删除了我的旧帖子。我的问题是试图确定我的代码有什么问题。我正在测试一个字符串,看它是否符合两个条件。它必须只包含字母字符和至少一个元音。我从哪里开始?
int check_word(char);
main()
{
char array[100];
int result;
printf("Enter a word:\n");
gets(array);
check_word(array);
{
if result == 1;
printf("Word is valid\n");
else
printf ("Word is notvalid.");
}
return 0;
}
int check_word(char a)
{
if ( a >= 'A' && a <= 'Z' )
a = a + 'a' - 'A'; /* Converting to lower case */
if ( (a == 'a' || a == 'e' || a == 'i' || a == 'o' || a == 'u') && (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
result = 1;
else
result = 0;
return result;
}
答案 0 :(得分:8)
以下是您可能想要查看的一些内容:
使用语义正确的语句填充每个空格...
。 解释(即推理)为什么你必须在那里写那个具体的陈述。
#include <...>
#include <...>
int is_vowel(int c)
{
switch(c) {
case 'a':
case 'A':
case 'e':
...
return ...;
}
return ...;
}
int justalpha_hasvowel(... candidate)
{
if(!candidate)
return ...;
int found_vowel = 0;
for(char *c = candidate; *c; ...) {
if(!isalpha(*c))
return 0;
found_vowel = is_vowel(*c) || ...;
}
return found_vowel;
}
... main(...)
{
char array[100];
int result;
printf("Enter a word:\n");
memset(array, 0, sizeof(array));
fgets(array, sizeof(array)-1, stdin);
... = justalpha_hasvowel(array);
if(...) {
printf("Word is valid\n");
} else {
printf ("Word is not valid.");
}
return 0;
}
答案 1 :(得分:2)
很多问题:
int check_word(char);
main() /* int main(void) is better */
{
char array[100];
int result;
printf("Enter a word:\n");
gets(array); /* deprecated, use fgets(array, sizeof(array), stdin) */
/* check_word(array); Do you want to check the first character or the whole string? */
result = check_word(array[0]); /* the first character */
/* if result == 1; Nops */
if (result == 1)
printf("Word is valid\n");
else
printf ("Word is notvalid."); /* what about \n :) ? */
return 0;
}
int check_word(char a)
{
if ( a >= 'A' && a <= 'Z' )
a = a + 'a' - 'A'; /* suggest tolower() */
/* c is not initialized --------------------------------------------v */
/* suggest parentheses around ‘&&’ within ‘||’ */
if ( (a == 'a' || a == 'e' || a == 'i' || a == 'o' || a == 'u') && (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
/* or delete all this stuff -------------------------------------^ from here */
/*result = 1;*/ return 1;
else
/* result = 0; */ return 0;
/* return result; */
}
答案 2 :(得分:1)
check_word(array);
{
if result == 1;
printf("Word is valid\n");
else
printf ("Word is notvalid.");
}
这些代码毫无意义。请使用:
result = check_work(array);
if(result == 1)
printf("Word is valid\n");
else
printf("Word id notValid\n");
另外,在功能int result ;
的开头添加check_word
。
你应该知道:
1. result
中的main
不是result
中的check_word
。
2. if(result ==1) ;
表示在(result == 1) == true
答案 3 :(得分:1)
有几个问题。
gets
; 将在您的代码中引入故障点和主要安全漏洞。自2011 C标准起不再支持。请改用fgets
。main
的隐式输入;请改用int main( void )
。check_word
取一个char
值作为参数,但您传递的是char
的数组,这意味着它收到char *
值 1 。基于函数的主体,看起来您只想传递一个字符,因此您将其称为
if ( check_word( array[0] ) == 1 )
{
printf( "word is valid\n" );
}
isupper()
返回true,字符值为大写,tolower()
将字符值从大写转换为小写,{{如果字符是字母等,则返回true。您需要isalpha()
才能使用这些函数。#include <ctype.h>
然后在
int vowel( int c )
{
int lc = tolower( c );
return ( lc == 'a' || lc == 'e' ||
lc == 'i' || lc == 'o' ||
lc == 'u' );
}
函数中使用它
check_word
我假设
if ( vowel( a ) && ...)
{
result = 1;
}
中的c
是拼写错误,您打算输入(c >= 'a' && c <='z')
。同样,这是a
库函数派上用场的地方:
isaplha
<小时/> 1。除非它是
if ( vowel( a ) && islapha( a ) )
{
result = 1;
}
或一元sizeof
运算符的操作数,或者是用于在声明中初始化数组的字符串文字,否则表达式为“N元素数组{{1 “将转换为类型为”&
指针“的表达式,表达式的值将是数组中第一个元素的地址。