【问题标题】:How to capitalize the first letter of each word in an array in C如何将C中数组中每个单词的首字母大写
【发布时间】:2013-03-30 23:50:39
【问题描述】:

我正在尝试制作一个简单的程序,将用户输入的句子存储在最多 80 个字符的数组中,然后将句子中的每个单词大写。我想我是在正确的轨道上,但是当我运行程序时,只显示句子的第一个单词。

#include<stdio.h>
 int main(void)
{   
 int i;         /*indexing integer*/
 char sen[81]; /*specify total of 80 elements*/
 printf("Enter a sentence no longer than 80 characters: \n\n");
 scanf("%s",sen);
 if((sen[0]>='a') && (sen[0]<='z'))
 {
  sen[0]=(char)(sen[0]-32); /*-32 in ascii to capitalize*/
 }
  for(i=0;sen[i]!='\0';i++)   /*loop until null character*/
  {
  if(sen[i]==' ')             /*if space: next letter in capitalized*/
   {
    if((sen[i+1]>='a') && (sen[i+1]<='z'))
    sen[i+1]=(char)(sen[i+1]-32);
   }
  }
  printf("%s",sen);     
  return 0;
}

我感觉它只打印数组中的第一个单词,因为 scanf 之后的第一个 if 语句,但我不完全确定。任何帮助,将不胜感激。谢谢。

【问题讨论】:

    标签: c arrays


    【解决方案1】:

    默认情况下,%s 转换说明符会导致 scanf 在第一个空白字符处停止。因此,您可以使用%80[^\n] 格式或fgets 函数。

    #include <stdio.h>
    
    scanf("%80[^\n]", sen);
    

    或者:

    #include <stdio.h>
    
    fgets(sen, sizeof sen, stdin);
    

    但是,由于scanf 读取格式化数据,人工输入不适合此类读取。所以fgets在这里应该更好。

    【讨论】:

      【解决方案2】:

      我感觉它只打印数组中的第一个单词,因为 scanf 之后的第一个 if 语句

      不,这是因为 %s 说明符使 scanf() 扫描到第一个空格。如果要获取整行文本,请使用fgets()

      char sen[81];
      fgets(sen, sizeof(sen), stdin);
      

      【讨论】:

        【解决方案3】:

        当您想将多个单词作为输入时,不要使用 scanf:使用 gets() 或 fgets().. 我用 gets() 和 puts() 运行你的代码,它成功了。

        【讨论】:

          猜你喜欢
          • 2021-08-08
          • 2015-11-10
          • 1970-01-01
          • 1970-01-01
          • 2020-08-30
          • 2014-05-19
          • 2010-12-05
          相关资源
          最近更新 更多