【发布时间】:2020-10-03 21:39:39
【问题描述】:
这是一个非常基本的 scanf/printf 问题,但由于某种原因,我在试图让我的程序正确读取和打印字符串时遇到了困难。如果我跑:
#include <stdio.h>
int main(void) {
int userInt;
double userDouble;
char userChar = 'z';
char userString[8];
// FIXME: Define char and string variables similarly
printf("Enter integer:\n");
scanf("%d", &userInt);
printf("Enter character:\n");
scanf("%c", &userChar);
printf("Enter string:\n");
scanf("%s", userString);
printf("%d %c %s", userInt, userChar, userString);
return 0;
使用这些输入
23 a howdy
我得到以下输出:
Enter integer:
Enter character:
Enter string:
23 a
如果我运行以下命令:
#include <stdio.h>
int main(void) {
int userInt;
double userDouble;
char userChar = 'z';
char userString[8];
// FIXME: Define char and string variables similarly
printf("Enter character:\n");
scanf("%c", &userChar);
printf("Enter string:\n");
scanf("%s", userString);
printf("Enter integer:\n");
scanf("%d", &userInt);
printf("%d %c %s", userInt, userChar, userString);
return 0;
使用以下输入运行:
a howdy 23
我得到了这个输出,这是我一直期待的。
Enter character:
Enter string:
Enter integer:
23 a howdy
我的问题是我必须在字符和字符串之前扫描整数以查找我正在处理的问题,我无法弄清楚为什么第二种方法有效而第一种方法无效。任何建议将不胜感激。
【问题讨论】:
-
当你说“使用以下输入运行”时,你是如何给它这些输入的?
-
通过 zybooks。我只是在“输入程序输入”的框中分别输入了 23 和 23。
-
scanf("%d", &userInt);仅消耗来自输入的23。之后的所有内容仍在stdin中,包括紧跟在23之后的空间。所以下一个scanf("%c", &userChar);读取空间然后scanf("%s", userString);读取a。 -
这很有意义。谢谢。
标签: c