为什么getchar()继续从输入行中提取字符,而不是要求更多字符?
下面的代码来自我正在使用的一本书,这让我非常困惑。首先,我不知道为什么/如何使用getchar()函数获取整个字符串。我知道如果输入一个字符串,getchar将取该字符串的第一个字符为什么getchar()继续从输入行中提取字符,而不是要求更多字符?,c,C,下面的代码来自我正在使用的一本书,这让我非常困惑。首先,我不知道为什么/如何使用getchar()函数获取整个字符串。我知道如果输入一个字符串,getchar将取该字符串的第一个字符 #include <stdio.h> void readLine (char buffer[]); int main (void) { int i; char line[81]; printf("Enter Message: "); readLine(line)
#include <stdio.h>
void readLine (char buffer[]);
int main (void) {
int i;
char line[81];
printf("Enter Message: ");
readLine(line);
printf ("%s\n\n", line);
return 0;
}
void readLine (char buffer[])
{
char character;
int i=0;
do {
character = getchar ();
buffer[i] = character;
++i;
}
while ( character != '\n' );
buffer[i - 1] = '\0';
}
#包括
无效读线(字符缓冲区[]);
内部主(空){
int i;
字符行[81];
printf(“输入消息:”);
读线(行);
printf(“%s\n\n”,第行);
返回0;
}
无效读线(字符缓冲区[])
{
字符;
int i=0;
做{
character=getchar();
缓冲区[i]=字符;
++一,;
}
while(字符!='\n');
缓冲区[i-1]='\0';
}
例如,我认为如果我输入“this is a test”,那么getchar函数将获取t并将其放入character变量,然后将其放入缓冲区[0]。我搞不清楚它是如何选择“他的是一个测试”的,因为没有什么可以增加下一个角色的数量
另外,我对缓冲区[]中用作正式声明的内容感到困惑,因为没有任何内容。为什么包括这一行 如果你很难理解我的要求,我很抱歉,因为很难用语言表达我所看到的 我搞不清楚它是如何选择“他的是一个测试”的,因为没有什么可以增加下一个角色的数量 这就是您的
所做的,而循环所做的getchar()
任务是一次提取一个字符。然后将该输入字符分配给buffer[i]
,并递增i
。当您输入“\n”时,循环终止
另外,我对缓冲区[]中用作正式声明的内容感到困惑,因为没有任何内容。为什么包括这一行
char行[81]
应初始化为字符行[81]=“”代码>
line
然后用作参数,解析为函数readLine()
。现在它替换了形式参数buffer
,在该函数中对buffer
所做的所有更改实际上都是对行所做的更改。这基本上就是将字符数组传递给函数时发生的情况。“getchar”的意思是“从输入缓冲区读取字符”。不是“等待按键”也是一个旁注,我不清楚缓冲区[]中的正式声明是什么,因为行中没有任何内容。为什么包括这一行?—您指的是哪一行?char line变量从未启动,然后传递给下一个函数。@artmso一旦从缓冲区中读取字符,下一个getchar调用将自动移动到下一个未读字符?是do-而循环意味着你继续在它里面做什么,直到条件变为false
。好吧,但我仍然不清楚当它得到char时我如何输入字符串,如果一个char变量中只有一个字符,那么其他字母是如何保持不变的呢accessed@yasgur99,你能再解释一下这个问题吗?我不知道你在评论中问了什么getchar()
只是从输入流(STDIN)中提取每个字符,然后将这些字符值赋给character
变量。然后将字符的值
放在缓冲区中的当前位置,并一直持续到读入的字符是换行符/换行符为止。@yasgur99-作者是正确的;如果在函数内创建变量,该变量的作用域仅在该函数内,那么如何期望该变量在main
中具有任何值?这是使用函数的基础。