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)
你不需要打fgets()五十次电话.它从中读取一行stdin并将其写入my_string.看起来你只想读一行,而不是五十(而只保留最后一行).50是将被读取和写入缓冲区的最大字符数(减1).此限制是为了防止缓冲区溢出.见fgets().
尝试for在fgets()通话前删除线路上的循环.此外,你不需要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建议的返回值的检查.(参见他对缓冲区大小的评论.)
| 归档时间: |
|
| 查看次数: |
2530 次 |
| 最近记录: |