我正在使用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
之前留出一个空格用于表示字符串,但仍然没有发生任何事情。
答案 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'
,并且会在溢出时自动修剪输出。