[英]Having trouble converting a whole sentence from uppercase to lower case in C
我的代码是正确的,因为我看不到它完全没有错误,但是当我执行它并说例如我键入“ MY NAME IS JACK”时,它只会将“ MY”转换为小写。
#include<stdio.h>
#include<string.h>
int main()
{
char str[20];
int i;
printf("Enter any string->");
scanf("%s",&str);
for(i=0;i<=strlen(str);i++){
if(str[i]>=65&&str[i]<=90)
str[i]=str[i]+32;
}
printf("\nThe string in lower case is->%s",str);
return 0;
}
正如其他人指出的那样,使用%s
转换说明符的scanf
将停止读取第一个空格字符的输入。 如果要阅读整行,请使用fgets
代替:
#include <stdio.h>
#include <ctype.h>
#include <string.h>
...
if ( fgets( str, sizeof str, stdin ) != NULL )
{
/**
* chop off the newline if it's present
*/
char *newline = strchr( str, '\n' );
if ( newline )
{
*newline = 0;
}
/**
* Convert the string to lower case.
*/
for ( int i = 0; str[i] != 0; i++ )
str[i] = tolower( str[i] );
}
注意-如果缓冲区中没有换行符,则意味着用户键入的字符串长于缓冲区可容纳的长度,这意味着输入流中有剩余数据。 您可能要发出警告并使用剩余的输入(通常通过重复调用fgets
或getchar
并在看到换行符时停止)。
%s
格式的scanf描述将其定义为:
任意数量的非空白字符,在找到的第一个空白字符处停止。 在存储序列的末尾会自动添加一个终止的空字符。
因此,您要在str
内请求第一个非空白文本,即“ MY”。 一旦碰到那个空间,它就会停止。
有什么更好的用法:一次读取整行,或者将scanf
放入循环中以便可以读取连续的单词?
输入完成后,也可以尝试使用以下代码。
void convertToUpperCase(char *sPtr)
{
while(*sPtr != '\0')
{
if (islower(*sPtr))
*sPtr = toupper(*sPtr);
}
}
第一,
scanf()
期望使用'char '类型的参数, 但是您正在传递char( )[20]。 只需传递“ str”即可。
第二,
这只是建议。 尝试使用isalpha()
或issuper()
, islower()
更改
scanf("%s",&str);
至
scanf("%[^\n]",str);
并且您的代码应该可以正常工作。 %s
读取直到空格。 使用[^\\n]
使scanf读入str变量,直到遇到换行符。 另外,不要传递str
的地址,而只能传递str
本身。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.