用于识别大写/小写字母C的功能

Taj*_*aji 2 c string lowercase uppercase

我正在尝试创建一个函数来识别第一个字母输入是大写还是小写,然后在相同的情况下(上/下)输出字符串的其余部分.

例如,"Hi there"会成为"HI THERE".

我不熟悉fgets.一旦我运行它,我可以输入并按Enter键,程序不会运行.我没有得到任何编译器错误.我相信我在虚空移位功能上出错了.

另外,我知道gets不推荐,fgets类似吗?或者它更好用scanf吗?

#include <stdio.h>
#include <ctype.h>
void shift (char *my_string); // Function declaration

int main()
{
  char inputstring[50];

  printf("Enter a string\n");
  char *my_string = inputstring;
  shift(my_string); // Function
}

void shift (char *my_string) // Function definition
{
  int i =0;
  char ch;

  for(i=0; i<50; i++)
    fgets(my_string, 50, stdin);

  while(my_string[i])
  {
    if(ch>='A' && ch<= 'Z') // When first char is uppercase
    {
      putchar (toupper(my_string[i]));
      i++;
    }
    else if (ch>='a' && ch <= 'z') // When first char is lowercase
    {
      putchar(tolower(my_string[i]));
      i++
    }
  }
  return;
}
Run Code Online (Sandbox Code Playgroud)

e0k*_*e0k 6

你不需要打fgets()五十次电话.它从中读取一行stdin并将其写入my_string.看起来你只想读一行,而不是五十(而只保留最后一行).50是将被读取和写入缓冲区的最大字符数(减1).此限制是为了防止缓冲区溢出.见fgets().

尝试forfgets()通话前删除线路上的循环.此外,你不需要my_stringin main().更正后的代码:

#include <stdio.h>
#include <ctype.h>
void shift (char *my_string);//function declaration

int main()
{
  char inputstring[50];

  printf("Enter a string\n");
  shift(inputstring);
}

void shift (char *my_string) //function definition
{
  int i;
  char ch;

  if ( fgets(my_string, 50, stdin) == NULL )
    return;

  ch = my_string[0];
  for ( i=0; my_string[i]; i++ )
  {
    if(ch>='A' && ch<= 'Z') //when first char is uppercase
    {
        putchar (toupper(my_string[i]));
    }
    else if (ch>='a' && ch <= 'z')//when first char is lowercase
    {
        putchar(tolower(my_string[i]));
    }
  }
  return;
}
Run Code Online (Sandbox Code Playgroud)

编辑:添加ch初始化,由@thurizas指出.将while循环更改为for循环.添加fgets()了@JonathanLeffler建议的返回值的检查.(参见他对缓冲区大小的评论.)

  • 我无法在代码中看到`ch`被初始化的地方(关于OP代码的相同评论). (2认同)