这是我的代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
char chaCap(char n);
int main()
{
char ch,a;
printf("Enter Sentence\n");
while((ch=getchar()) != '\n')
{
chaCap(ch);
printf("%c",a);
}
printf(" \n");
return 0;
}
void chaCap(char n)
{
if(n >= 'a' && n <='z')
n-=32;
}
我需要
我是为改变大写字母而做的,但我无法降低,反之亦然。
当我为2.和3编写代码时,getchar()变得一无所有......
答案 0 :(得分:2)
使用 tolower()功能:
while((ch=getchar()) != '\n')
{
printf("%c", tolower(ch));
}
答案 1 :(得分:2)
您需要在函数chaCap(char n)
,
char chaCap(char n)//need to return char instead of void
{
if(n >= 'a' && n <='z')
n-=32;
return n; // return capital letter here
}
然后在main()
,
int main()
{
//...
while((ch=getchar()) != '\n')
{
a = chaCap(ch); // get return value
printf("%c",a);
}
}
答案 2 :(得分:1)
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
char *strlwr(char *str){
char *s;
for(s = str; *s; ++s){
if(isupper(*s))
*s = tolower(*s);
}
return str;
}
char *strupr(char *str){
char *s;
for(s = str; *s; ++s){
if(islower(*s))
*s = toupper(*s);
}
return str;
}
char *strvrs(char *str){
char *s;
for(s = str; *s; ++s){
if(islower(*s))
*s = toupper(*s);
else if(isupper(*s))
*s = tolower(*s);
}
return str;
}
int main(void){
int ch;
size_t i = 0, size = 32;
char *str = malloc(size);
printf("Enter Sentence\n");
while((ch=getchar()) != '\n' && ch != EOF){
str[i++] = ch;
str[i++] = '\0';
if(i-- == size){
char *temp = realloc(str, (size += 32));
if(!temp){
fprintf(stderr, "realloc error\n");
free(str);
exit(EXIT_FAILURE);
}
str = temp;
}
}
printf("original : %s\n", str);
printf("vice versa : %s\n", strvrs(str));
printf("upper : %s\n", strupr(str));
printf("lower : %s\n", strlwr(str));
free(str);
return 0;
}
答案 3 :(得分:0)
将ch
声明为全局变量。
以下程序会将所有大写字母更改为小写字母,将所有小写字母更改为大写字母。
您的程序需要进行一些修改才能获得所需的结果。我已经进行了必要的更改。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
void chaCap(char ch);
char ch;
int main()
{
printf("Enter Sentence\n");
while((ch=getchar()) != '\n')
{
chaCap(ch);
printf("%c",ch);
}
printf(" \n");
return 0;
}
void chaCap(char ch)
{
if(ch >= 'a' && ch <='z')
::ch=ch-32;
else if(ch>='A'&&ch<='Z')
::ch=ch+32;
}