我对编程很陌生。我正在做家庭作业,以帮助我们理解scanf和数组。该程序应该要求用户输入一组未知的数字。每组数字应该用下面的空格分隔,而不是输入。
14 15 16
用户也可以使用空格在单独的行上输入数字,但是在最后输入的数字上再次输入用户不应该输入。
12 13
44 55
5
用户应按ctrl-d指示输入结束。程序应显示用户输入的元素数量,并显示用户输入的数字。我一直在阅读并认为我有一个关于scanf如何工作的基本概念,但我仍然有一些困难。代码类型的工作。但是,如果用户只需在一行输入数字,则需要按三次ctrl-d才能退出循环并显示信息。
从我在网上找到并理解,我认为它不起作用,因为用户没有命中返回,所以输入没有被刷新到标准输入。所以如果我理解正确的话,第一次点击ctrl-d时它会刷新输入。然后我第二次按下ctrl-d它最终将EOF放入流中,第三次它最终将读取EOF产生的-1并退出循环。
无论如何,一旦输入ctrl-d就强制输入流。
#include <stdio.h>
int main()
{
int numbers[20];
int i = 0, count, result, n;
int flag = 0;
printf("Please enter a seiries of numbers:\n");
while (flag == 0)
{
result = scanf("%d", &n); //scan user input into n variable along with getting scanf return value and storing in result variable
printf("result =%i \n", result); //Just printing scanf return value to insure it doing what I think it should be doing
if (result == 1)
{
numbers[i] = n; //if scanf return value is 1 places value of n into first element of array
i++; //used to increment my array
flag = 0;//keeps value of flag equal to 0 in order to stay in loop
}
if(result == -1) //checks to see if result = to -1 should be value returned if cntl +d is entered
{
flag = 1; //sets flag to 1 when cntrl +d is entered in order to exit loop.
}
}
for (count = 0 ; count < i ; count++) //loop to print I which is representing number of user inputs and the actual numbers entered by the user.
{
printf("\ni= %i numbers= %i\n", i, numbers[count]);
}
return 0;
}
答案 0 :(得分:2)
我不会直接给你一个解决方案,但会尝试帮助你改进C中的编码。你使用C越多,你会发现一个人可以编写相当紧凑的代码,一旦语言是掌握。
您可以省略flag
,因为它取决于result
您可以省略result
,因为它只是scanf
的返回值
您可以省略n
并直接使用numbers
数组
并且您可以使用预处理器来使用常数(通常用于您的情况下的数组大小)。
看看这个。也许它可以帮助你了解一下:
#include <stdio.h>
#define COUNT 20
main() {
int numbers[COUNT];
int i;
i = 0;
while (scanf("%d", &numbers[i]) == 1 && i < COUNT)
printf("\t%d\n", numbers[i++]);
return 0;
}
<强> P.S:强> 我建议您熟悉访问数组和阅读指针的不同方法。真的有非常亲密的关系。
数组中第一个元素的地址:numbers
访问数组的i
元素:numbers[i]
同等地:*(numbers + i)
另一个等价:*(i+numbers)
惊喜,但又等同于:i[numbers]
数组的i
元素的地址:&numbers[i]
K&amp; R是一个很好的信息和学习资源。