在从最大大小为100的数组中获取用户输入后,如何检查用户输入的值的数量?

时间:2015-01-14 17:11:21

标签: c arrays scanf

我对数组的最大大小(N)有限制,我想要求用户输入一个小于或等于N的数字数组。如何找到用户的数值已输入?

这就是我所拥有的,而且它不起作用。

(基本上,我告诉程序停止计数" n"一旦用户点击进入)(当然我初始化n = 0)

for(i=0;i<(N-1);i++)
{

    scanf("%d",&a[i]);
    n++;

    if(a[i]=='/n'){break;}
}

任何帮助表示赞赏!谢谢!

3 个答案:

答案 0 :(得分:1)

这不起作用,因为scanf使用"%d"说明符,会跳过\n,您可以使用所有空白字符并搜索'\n' with fgetc() '\n',可以使用ungetc()将最后一个不是#include <stdio.h> #include <ctype.h> int main() { int a[100]; int i; int result; result = 1; i = 0; while ((i < 100) && (result == 1)) { int chr; /* * consume all whitespace characters left by previous scanf, * stop if one of them is '\n' */ while (isspace((chr = fgetc(stdin))) && (chr != '\n')); /* found the '\n', set the flag to exit the loop */ if (chr == '\n') result = -1; else { /* not interesting put back this character for scanf to read it */ ungetc(chr, stdin); /* save the result of scanf, that way you can validate input */ result = scanf("%d", &a[i]); if (result == 1) i++; } } printf("read %d numbers\n", i); /* print the carachters, this will print in reverse obviously */ while (--i >= 0) printf("%d\n", a[i]); return 0; } 的空格字符返回到流中,因此该程序可能会执行您需要的操作

{{1}}

答案 1 :(得分:0)

#include <stdio.h>
#include <ctype.h>

#define N 100

int main(void){
    int v, a[N];
    int i, n=0, stop = 0;
    int ch, res;

    while(!stop && EOF != (res = scanf("%d", &v))){
        if(res == 1){
            a[n++] = v;
            if(n == N)
                break;
            while(isspace(ch = getchar())){
                if(ch == '\n'){
                    stop = 1;
                    break;
                }
            }
            ungetc(ch, stdin);
        } else {
            printf("invalid input!\n");
            while(getchar() != '\n');
        }
    }
    for(i = 0; i < n; ++i)
        printf("%d ", a[i]);
    printf("\n");
    return 0;
}

答案 2 :(得分:-1)

您可以要求用户输入他愿意输入的项目数。我们假设最大数量为N,用户想要的商品数量为n

puts("ENTER NUMBER OF ITEMS");
scanf("%d", &n);

n = min(n, N);
n = max(n, 0);

for(int i = 0; i < n; i++)
{   scanf("%d", &a[i]);
}

如果用户不断输入数字,然后按Enter键停止,您可以逐行读取输入并检查用户是否输入了某些内容或者以其他方式突破循环。

int i = 0;
for(; i < N; i++)
{   char s[100];
    gets(s);

    if(strcmp(s, "") == 0) break;
    a[i] = atoi(s);
}

读取的项目数等于i。这不太安全,如果您愿意使用此解决方案,则必须进行一些错误检查。