-6

我以为我修复了我的代码,所以我删除了我的旧帖子。我的问题是试图确定我的代码有什么问题。我正在测试一个字符串,看看它是否满足两个条件。它必须只包含字母字符和至少一个元音。我从哪里开始?

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;
}
4

4 回答 4

8

以下是您可能需要查找的一些内容:

  • 是阿尔法
  • C switch 语句
  • 数组和单个变量之间的区别。
  • C 中的字符串(实际上是一个以 0 结尾的 char 数组)
  • 返回值如何工作

编辑:这是一个小练习:“填补空白”

...用语义正确的陈述填补每个空白。解释(即原因)为什么你必须在那里写下那个特定的陈述。

#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;
}
于 2013-07-27T17:12:57.300 回答
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 ‘&amp;&’ 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; */
}
于 2013-07-27T17:22:24.863 回答
1

几个问题。

  1. 永远不要永远不要使用gets; 它将在您的代码引入一个故障点和一个主要的安全漏洞。自 2011 C 标准起不再支持它。改为使用fgets

  2. main自 1999 标准起,不再支持隐式键入 of ;改为使用int main( void )

  3. 您已声明check_word将单个char值作为参数,但您传递给它一个数组char这意味着它接收一个char *1。基于函数的主体,看起来您只想传递一个字符,因此您可以将其称为
    
        if ( check_word( array[0] ) == 1 )
        {
          printf( "word is valid\n" );
        }
    

  4. 有许多库函数可以使您的`check_word`函数更简单:isupper()如果字符值是大写,则返回true,tolower()将字符值从大写转换为小写,isalpha()如果字符是字母,则返回true,等等。你需要#include <ctype.h>使用这些功能。

  5. 您可能希望将元音检查分解到它自己的函数中,如下所示:
    
        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;
        }
    
    我假设cin(c >= 'a' && c <='z')是一个错字,而你的意思是输入a. 同样,这是isaplha库函数派上用场的地方:
    
        if ( vowel( a ) && islapha( a ) )
        {
          result = 1;
        }
    


1. 除非它是sizeof或一元运算符的操作数&,或者是在声明中用于初始化数组的字符串字面量,否则“N-element array of T”类型的表达式将被转换为“pointer”类型的表达式到T",表达式的值将是数组中第一个元素的地址。

于 2013-07-27T22:25:36.150 回答
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. resultinmain不是resultin check_word

2.if(result ==1) ;表示什么都不做(result == 1) == true

于 2013-07-27T17:12:28.330 回答