我想在我的笔记本电脑(windows 7)上做一个简单的顶部编码。似乎我写的任何东西都只在开头大写1个单词。
是否使用%s/%c/%[^n]
我该怎么办?
我使用Microsoft Visual c++ 2010 Express
#include <stdio.h>
#include <ctype.h>
int main()
{
char kalimat;
scanf ("%[^n]",&kalimat);
kalimat=toupper(kalimat);
printf("%s",kalimat);
getchar ();
return(0);
}
你想读一个单词。为此,您需要一个预定义大小的char
数组。所以改变
char kalimat;
char kalimat[64]; /* Can hold 63 chars, +1 for the NUL-terminator */
接下来,要扫描一个单词。所以改变
scanf("%[^n]",&kalimat);
scanf("%63s", kalimat);
此处所做的更改为
-
%s
用于扫描一个单词,而%c
用于扫描一个字符。 - 删除&符号,因为
%s
期望char*
,而不是char**
或char(*)[64]
。 - 使用长度说明符(63,这里)以防止缓冲区溢出。
然后,如果你想
将数组/单词的第一个字符大写,使用
kalimat[0] = toupper(kalimat[0]);
或
*kalimat = toupper(*kalimat);
将数组中的所有字符大写,对数组的每个索引使用一个调用
toupper
的循环:int i, len; /* Declare at the start of `main` */ for(i = 0, len = strlen(string); i < len; i++) /* Note: strlen requires `string.h` */ kalimat[i] = toupper(kalimat[i]);
但是…您可能需要更改
getchar ();
int c; /* Declare at the start of `main` */
while((c = getchar()) != EOF && c != 'n');
以防止控制台关闭。
固定代码:
#include <stdio.h>
#include <ctype.h>
#include <string.h> /* For `strlen` */
int main()
{
int i, len, c;
char kalimat[64];
scanf ("%63s", &kalimat);
/* `*kalimat = toupper(*kalimat);` */
/* or */
/* `kalimat[0] = toupper(kalimat[0]);` */
/* or */
/* `for(i = 0, len = strlen(string); i < len; i++)
kalimat[i] = toupper(kalimat[i]);` */
printf("%s", kalimat);
while((c = getchar()) != EOF && c != 'n');
return(0);
}
C库函数:
int toupper(int c);
将一个小写字母转换成它对应的大写
如果你想打印一个字符串的所有字母为大写:
int i=0;
while(str[i])
{
putchar (toupper(str[i]));
i++;
}
然而,对于单个字符的大写,你可以简单地使用:
putchar (toupper(mychar));
函数返回大写(如果存在)或返回发送给它的相同字符。
在C语言中你可以存储一个字符串:
char *string1="Elvis";
char string2[]="Presley";
char string3[4]="King";