![](/img/trans.png)
[英]How to capitalize first letter of each word except certain words (“and”, “but”, “of”)?
[英]How to capitalize the first letter of each word in an array in C
我試圖創建一個簡單的程序,將一個用戶輸入的句子存儲在一個最多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語句,但我不完全確定。 任何幫助,將不勝感激。 謝謝。
我有一種感覺,因為scanf之后的第一個if語句,它只打印數組中的第一個單詞
不,那是因為%s
說明符使scanf()
掃描到第一個空格。 如果要獲取整行文本,請使用fgets()
:
char sen[81];
fgets(sen, sizeof(sen), stdin);
默認情況下, %s
轉換說明符會導致scanf停在第一個空白字符處。 因此,您可以使用%80[^\\n]
格式或fgets
函數。
#include <stdio.h>
scanf("%80[^\n]", sen);
要么:
#include <stdio.h>
fgets(sen, sizeof sen, stdin);
但是,由於scanf
讀取格式化數據 ,因此人類輸入不適合此類讀數。 所以fgets
在這里應該會更好。
當你想要多個單詞作為輸入時不要使用scanf:使用gets()或fgets()..我用gets()和puts()運行你的代碼並且它工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.