对C中的GCC和scanf感到困惑

时间:2016-04-07 05:07:24

标签: c gcc scanf

我正在使用GCC来编译我的C代码。 我的第二个scanf并未停止获取输入。 它只读取第一个scanf并打印两个语句,一个是我在字符串中输入的,另一个是空白。

int main (void) {
    setvbuf(stdout, NULL, _IONBF, 0);

    char string[25] = {'\0'};
    char c;

    scanf(" %s", string);  

    scanf(" o%c", &out);

    printf("Input is : %s \n\n", string);
    printf("Out is: %c", out);

    return 0;
}

而不是

输入是我键入的内容和提示输入字符

的提示

我输出如下所示

Input is : whatever i typed
Out is:

程序终止。有人可以帮忙吗我做了一些研究,试图在%c之前留出一个空格用于表示字符串,但仍然没有发生任何事情。

1 个答案:

答案 0 :(得分:3)

您尚未定义out。此处未使用c。说完了

更改

scanf(" o%c", &out);  //What is that o in here? Is it a typo?

scanf(" %c", &out);

如果您的终端使用行缓冲输入

scanf(" %s", string);  

可以读取输入直到第一个空白区域。因此来自空白区域的输入缓冲区未使用,可用于下一次自动开始从缓冲区读取的scanf。因此,如果您输入带空格的字符串,则在您的情况下,空格将分配给字符out

更改第一个scanf,如下所示清除缓冲区:

if( scanf(" %s", string) == 1)
{
while(getchar()!='\n')
  continue;
}

您也可以替换

scanf(" %s", string); 

fgets(string,25,stdin);
/* Use 26 if you actually wish to have max 25 characters
 * ie char string[26]={'\0'}
 */

fgets的优势在于它可以读取空格和换行符'\n',并且会在溢出时自动修剪输出。