我正在尝试创建一个简单的程序,将一个用户输入的句子存储在一个最多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语句,但我不完全确定。任何帮助,将不胜感激。感谢。
答案 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()来运行你的代码并且它有效。