我正在学习C语言。我编写了一个程序,要求用户输入他们的名字并以大写字母打印出他们的名字,例如: - 如果用户输入Stack Overflow作为他的名字,它会打印出STACK OVERFLOW。但是,当我运行该程序时,它只是给出了(作为输出,你可以把它弄清楚代码的错误吗?我正在使用Code::Blocks(版本13.12)。
这是我的代码: -
#include <stdio.h>
#include <stdlib.h>
int main()
{
char name[25] ;
char name_up[25] ;
int i ;
fputs("Enter your name : " , stdout) ;
fgets(name , 24 , stdin) ;
for(i=0 ; i<strlen(name) ; i++)
{
if(name[i] == '\n')
{
break ;
}
else
{
if(islower(name[i]))
{
name[i] = toupper(name_up[i]) ;
}
else
{
name[i] = name_up[i] ;
}
}
}
printf("Entered name is : %s .\nEntered name in upper case is : %s ." , name , name_up) ;
return 0;
}
答案 0 :(得分:3)
好吧,你丢失了string.h and ctype.h
个头文件,你的变量已被颠倒过来了:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main()
{
char name[25] = {0}; /* initializing string arrays to null (zero) insures they */
char name_up[25] = {0}; /* are null-terminated for strings less than 25 chars */
int i ;
fputs("Enter your name : " , stdout) ;
fgets(name , 24 , stdin) ;
for(i=0 ; i<strlen(name) ; i++)
{
if(name[i] == '\n')
{
name[i] = 0; /* strip newline from end of name */
name_up[i] = 0; /* do not include newline in name_up */
break ;
}
else
{
if(islower(name[i]))
{
name_up[i] = toupper(name[i]) ; /* You assign name_up = name */
} /* you had it reversed... */
else
{
name_up[i] = name[i] ;
}
}
}
printf("Entered name is : %s.\nEntered name in upper case is : %s.\n" , name , name_up) ;
return 0;
}
<强>输出:强>
$./bin/chgcase
Enter your name : StackOverflow
Entered name is : StackOverflow.
Entered name in upper case is : STACKOVERFLOW.
注意:始终初始化变量(包括数组)。从长远来看,这将为你节省许多悲伤。此外,始终在启用警告的情况下进行编译。这将告诉您代码中关注区域的位置。 E.g:
gcc -Wall -Wextra -o bin/chgcase changecase.c
答案 1 :(得分:1)
将for(i=0 ; i<strlen(name) ; i++)
更改为for(i=0 ; name[i] != '\n' ; i++)
并删除阻止:
if(name[i] == '\n')
{
break ;
}
改变它:
if(islower(name[i]))
{
name[i] = toupper(name_up[i]) ;
}
else
{
name[i] = name_up[i] ;
}
为:
if(islower(name[i]))
{
name_up[i] = toupper(name[i]) ;
}
else
{
name_up[i] = name[i] ;
}
哦,是的,添加行#include <ctype.h>
是的,忘了在name_up的末尾添加一个终止空值
在&#34; for循环&#34;添加以下内容:name_up[i] = '\0';
,可能是:name[i] = '\0';
答案 2 :(得分:0)
你必须改变name [i]和name_up [i]的位置。否则,您将使用空的name_up数组覆盖name数组。
else
{
if(islower(name[i]))
{
name_up[i] = toupper(name[i]) ;
}
else
{
name_up[i] = name[i] ;
}
}