繁体   English   中英

无法在C中将整个句子从大写转换为小写

[英]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] );
}          

注意-如果缓冲区中没有换行符,则意味着用户键入的字符串长于缓冲区可容纳的长度,这意味着输入流中有剩余数据。 您可能要发出警告并使用剩余的输入(通常通过重复调用fgetsgetchar并在看到换行符时停止)。

%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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM