在scanf()中格式化字符串和字符转换之前,程序退出时没有空格

时间:2016-05-17 10:54:30

标签: c

为什么当我在options.forEach(function(option){ $("<option/>", { text: option.name, value: option.value }) .prop('selected', mycondition) //<=== .appendTo("#mySelectElem"); }); 中的格式说明符之前使用空格时,程序运行正常。代码如下:

scanf()

当我没有下面这个代码的空格时,它会退出:

printf("What's your username: ");
scanf(" %s", username);

printf("Do you want to make a deposit or a withdrawal? [d/w]\n");
scanf(" %c", &choice);

对此有一个很好的解释吗?

2 个答案:

答案 0 :(得分:5)

是的,有一个很好的解释,并且解释是当您尝试读取第二个输入的字符时,为第一个输入输入的换行仍然在缓冲区中。使用"%c" scanf格式读取单个字符将读取输入缓冲区中的第一个字符,无论它是什么。

添加前导空格,告诉scanf阅读并丢弃所有前导空格。

大多数格式会自动执行此操作,例如"%s"格式,因此您不需要格式字符串中的前导空格。阅读例如this scanf (and family) reference了解更多信息,以及明确跳过前导空格所需的格式。

答案 1 :(得分:1)

This happens because scanf skips over white space when it reads data such as the integers or char. White space characters are those characters that affect the spacing and format of characters on the screen, without printing anything visible. The white space characters you can type as a user are the blank space (spacebar), the tab character (Tab key), and the newline (Enter Key). reference link here.