#include <stdio.h>
#include <string.h>
/* Function prototypes */
void wordLength ( char *word );
int main (void)
{
int choice;
char word [20];
printf( "Choose a function by enterting the corresponding number: \n"
"1) Determine if words are identical\n"
"2) Count number of words in sentence provided\n"
"3) Enter two strings to be strung together\n"
"4) Quit program\n" );
scanf( "%d", &choice );
flushall();
while (choice >= 1 && choice < 4)
{
/* if statements for appropriate user prompt and calls function */
if (choice == 1)
{
/* gather user input */
printf( "\nYou have chosen to determine word length.\n"
"Please enter the word:\t");
gets( word );
/* call function to output string as well as the string length */
wordLength( word );
}
}
}
void wordLength( char *word )
{
printf( "The string entered is: %c\n", *word);
}
每当我输入一个单词时,我的程序只输出字符串的第一个字母。为什么这样做?我的字符串长度被声明为20,所以我知道这不是问题所在!我似乎无法弄明白。谢谢!
答案 0 :(得分:6)
因为你告诉它打印一个字符:
printf("The string entered is: %c\n", *word);
如果您想要字符串,请使用:
printf("The string entered is: %s\n", word);
答案 1 :(得分:2)
void wordLength( char *word )
{
printf( "The string entered is: %c\n", *word);
}
在wordLength
函数中,您使用%c
作为格式说明符。 %c
用于打印一个字符。使用%s
打印字符串。
同时更改*单词到单词。 * word引用数组中的第一个或“zeroeth”值 - 单个字符。
没有星号的参数“word”引用整个数组,也可以表示为&amp; word [0]。这意味着它是零元素的地址。
总结...... %s需要一个数组的地址,&amp;指定地址,[0]指定零点元素。一个没有&amp;的变量。和相应的数组括号[]是等价的。所以“&amp; word [0]”与“word”相同。在您需要指定不是零元素的元素的地址(例如&amp; word [10])之前,这似乎毫无意义。例如,如果你的字符串是“坐在土豆锅上的奥蒂斯”,你想从字符串中拔出“奥的斯”一词。
%c需要单个字符,星号“取消引用”指针,因此* word引用实际字符,而不是字符的地址。
为了想象它,想象一个药盒,也许是你的祖父用于他的药物。药丸代表一系列字符。有7个小隔间,每个隔间标注一周中的每一天,从星期日开始到星期六结束。所以你的数组从0到6。第一个隔层是字符串的开头。星期日是字符数组的零元素的地址。
当你打开周日隔间时,你会看到里面的药片 - 这就是“价值”。星期日将表示为&amp; word [0],星期一将是&amp; word [1]。如果你想要星期日隔间内的值 - 药丸 - 那么你指定*单词。如果你想将整个数组作为一个字符串(以提供%s格式说明符),那么你可以指定&amp; word [0]或只是简单的“word”,因为它们是等价的。如果你想从第二个字符开始打印字符串,你可以指定&amp; word [1]。想要周一隔间内的价值吗?使用*(word + 1)和字符使用%c打印它。我希望我已经为你澄清了一些事情。
答案 2 :(得分:2)
您使用%c作为修饰符,仅打印字符。你应该使用%s。查看println modifiers。
答案 3 :(得分:0)
如果必须使用它,您可以逐字符打印:
for( i = 0; i < 20; i++ ){
printf( "%c", *( word + i ) );
/* If you reach the end of the string, print a new line and stop. */
if( *( word + i ) == '\0' ){
printf( "\n" );
break;
}
}