【发布时间】:2016-04-28 13:08:32
【问题描述】:
我正在尝试创建一个函数,该函数将识别输入的第一个字母是大写还是小写,然后以相同的大小写(大写/小写)输出字符串的其余部分。
例如,"Hi there" 将变为 "HI THERE"。
我不熟悉fgets。一旦我运行它,我可以输入并按 Enter 并且程序不会运行。我没有收到任何编译器错误。我相信我在 void shift 功能上出错了。
另外,我知道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;
}
【问题讨论】:
-
问题是您将 fgets 调用嵌套在运行 50 次的 for 循环中。
-
"gets不推荐,fgets类似吗?还是用scanf更好?" --> 使用
fgets()。
标签: c string uppercase lowercase