【发布时间】:2012-02-15 22:40:33
【问题描述】:
我是一名数学专业的学生,我正在学习 C 编程的基础知识。我需要一个程序来读取包含在数组中的输入,其中的组件必须具有某些必要条件;我希望程序向用户询问数组的组件。然后,用户必须输入这些组件,并用空格分隔它们。细节对于解决主要问题并不重要;我将选择一个比我正在处理的更简单的示例:假设我想要一个包含 6 个组件的数组不包含数字 4。所以我尝试了:
#include <stdio.h>
int main(void) {
int a[6];
printf("enter components: ");
int i;
for (i = 0; i < 6; i++) {
scanf("%d", &a[i]);
if (a[i] == 4) printf(" \n\n4 is not allowed, try again\n\n");
}
for (i = 0; i < 6; i++) {
printf("%d ", a[i]);
}
}
如果我编译并运行它,例如输入:
1 2 3 4 5 6
我会收到我的错误消息,但只有在按下回车之后,即在输入所有六个组件之后(不是在第四次按下空格之后)。所以这是我的问题(我正在寻找不使用字符串或指针的解决方案,除非没有它们是不可能的):
有没有办法让程序在输入后续空格后立即读取组件(并采取相应的行动)?我猜不是因为 scanf 只有在用户按下回车后才起作用,而不是空格,对吗?
-
如果没有,有没有办法让程序在最后按下回车后立即读取所有组件,但让用户从最后一个正确的组件中提取?例如,通过上述输入,我希望程序显示如下内容:
4 is not allowed 1 2 3 _以便用户可以更正他/她的输入(也可能更改前三位)。
对不起,如果这个问题太愚蠢了!谢谢你的帮助!!
编辑:嗯,谢谢你的好答案,你们都非常有帮助!可惜我只能接受一个。
【问题讨论】:
-
抱歉,错误处理和检查输入是否有错误是不同的事情。已编辑。如果你不反对的话。
-
C 标准库中没有任何东西支持这一点;您将需要使用或多或少特定于平台的库,例如ncurses。你的目标是什么平台?
-
@Gangnus 没问题,感谢您的编辑。
-
@ruakh 我在 Windows 中使用代码块;我只用过标准库和数学库,其他的不知道。