Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么getchar()继续从输入行中提取字符,而不是要求更多字符?_C - Fatal编程技术网

为什么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)

下面的代码来自我正在使用的一本书,这让我非常困惑。首先,我不知道为什么/如何使用getchar()函数获取整个字符串。我知道如果输入一个字符串,getchar将取该字符串的第一个字符

#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
中具有任何值?这是使用函数的基础。