如何将C中数组中每个单词的第一个字母大写

时间:2013-03-30 23:50:40

标签: c arrays

我正在尝试创建一个简单的程序,将一个用户输入的句子存储在一个最多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语句,但我不完全确定。任何帮助,将不胜感激。感谢。

3 个答案:

答案 0 :(得分:2)

  

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

不,那是因为%s说明符使scanf()扫描到第一个空格。如果您想获得整行文字,请使用fgets()

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

答案 1 :(得分:2)

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

#include <stdio.h>

scanf("%80[^\n]", sen);

或者:

#include <stdio.h>

fgets(sen, sizeof sen, stdin);

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

答案 2 :(得分:0)

当你想要多个单词作为输入时,不要使用scanf:使用gets()或fgets().. 我使用gets()和puts()来运行你的代码并且它有效。