C 如何接受并同时屏蔽不需要的输入?(加拿大国家统计局)

C 如何接受并同时屏蔽不需要的输入?(加拿大国家统计局),c,C,我在玩scanf时遇到了一个小问题。。。更具体地说,我希望阅读整个输入,然后忽略其余部分。让我告诉你我的意思: #include <stdio.h> int main(void) { int number_of_iterations = 1; int circles = 0; scanf("%d", &number_of_iterations); unsigned int chr[number_of_iterations][8];

我在玩
scanf
时遇到了一个小问题。。。更具体地说,我希望阅读整个输入,然后忽略其余部分。让我告诉你我的意思:

#include <stdio.h>

int main(void)
{
    int number_of_iterations = 1;
    int circles = 0;

    scanf("%d", &number_of_iterations);
    unsigned int chr[number_of_iterations][8];

    while (number_of_iterations > circles) {
        scanf("%x", chr[circles]);
        circles++;
    }

    int circles2 = 0;
    while (circles2 < circles){
        printf("%x \n", chr[circles2]);
        circles2++;
    }

    return 0;
}
输入将花费
1 1CAAC
,但我希望其余的都能阅读,但会扔掉。。。是否有这样做的功能

Dominiks-MacBook-Pro-2:testing stylez$ ./a.out
1 1CAAC

      28    EAAEB5
  F489AD95
  CAAC

   28    EAAEB5
F489AD95 F489AD95 EAAEB5
F489AD95 F489AD95e30ca8c0Dominiks-MacBook-Pro-2:testing stylez$ 
Dominiks-MacBook-Pro-2:testing stylez$       28    EAAEB5
bash: 28: command not found
Dominiks-MacBook-Pro-2:testing stylez$   F489AD95
bash: F489AD95: command not found
Dominiks-MacBook-Pro-2:testing stylez$   CAAC
bash: CAAC: command not found
Dominiks-MacBook-Pro-2:testing stylez$ 
Dominiks-MacBook-Pro-2:testing stylez$    28    EAAEB5
bash: 28: command not found
Dominiks-MacBook-Pro-2:testing stylez$ F489AD95 F489AD95 EAAEB5
bash: F489AD95: command not found

从一个ansser编辑代码(测试代码以了解其工作原理)

#include <stdio.h>

int consume_line(void) {
    int ch;
    while ((ch = fgetc(stdin)) != '\n') && ch != EOF) {
        ;
    }
    return ch;
}

int main(void)
{
    int number_of_iterations = 1;
    int circles = 0;

    int cnt;
    switch (scanf("%d", &number_of_iterations)) {
        case 1: consume_line(); break;
        case 0: consume_line(); /* Decide if code should re-try reading, etc. */ break;
        case EOF:
            printf("hello");// Decide what to do if End-Of-File or rare Low-Level-Input-Error occurred.
    }

    return 0;
}
#包括
整数消耗_行(无效){
int-ch;
而((ch=fgetc(stdin))!='\n')&&ch!=EOF){
;
}
返回ch;
}
内部主(空)
{
迭代次数的整数=1;
整数圈=0;
int-cnt;
开关(scanf(“%d”和迭代次数)){
案例1:消费线();中断;
案例0:使用_line();/*决定代码是否应重新尝试读取,等等。*/中断;
案例EOF:
printf(“hello”);//决定在出现文件结尾或罕见的低级输入错误时该怎么办。
}
返回0;
}
我希望阅读整个输入,然后忽略其余部分

不要使用
scanf()
,而是使用
fgets()
进行所有用户输入,然后使用
sscanf()、strtol()
等进行解析

如果必须使用
scanf()
,请测试其返回值并使用该行的其余部分

int consume_line(void) {
  int ch;
  while ((ch = fgetc(stdin)) != '\n'  && ch != EOF) {
    ;
  }
  return ch;
}


....
switch (scanf("%d", &number_of_iterations)) {
   case 1: consume_line(); break;
   case 0: consume_line(); /* Decide if code should re-try reading, etc. */ break;
   case EOF: // Decide what to do if End-Of-File or rare Low-Level-Input-Error occurred.
}

不,没有一种功能可以读懂你的心思,知道你想用哪一部分,忽略哪一部分。您必须自己编写代码才能做到这一点。编译器已经变得相当聪明了,但是还没有一个是心灵感应的。FWIW,编写
while
的通常方法是
while(圆圈
-它更容易阅读和理解。终端输出不是来自您发布的代码,因为您发布的代码没有输出任何内容。请发布一个用完整代码编辑的.关于:
unsigned int chr[迭代次数][8]
因为这是声明一个
int
数组,所以后面的
8
是8个整数,而不是8个字符。也就是说,数组的每一行都是'8*sizeof(int)'字节宽我要把它改成char别担心,我关心的问题是,我想解析然后扔掉输入谢谢你的回答,我能问一下里面应该有什么吗-感谢you@StyleZ在
while
循环中,执行
什么都不是。代码将继续阅读,直到'\n'EOF。我真的很抱歉,但我在编译它时遇到了一个错误(我是新手:D),所以这确实是一个愚蠢的问题,但我仍然遇到了这个错误,我不知道该怎么处理它:main.c:9:44:错误:预期标识符while((ch=fgetc(stdin))!='\n')&(ch!=EOF){^(它指向(ch…提示:避免“我没有线索”。与其夸大和说出你不能做的事情,不如说明你能做什么和观察到了什么。还有一个错误(我假设它会被提出,但我不确定在那里解析什么/hwo来处理它)->
未声明的标签“ch”
int consume_line(void) {
  int ch;
  while ((ch = fgetc(stdin)) != '\n'  && ch != EOF) {
    ;
  }
  return ch;
}


....
switch (scanf("%d", &number_of_iterations)) {
   case 1: consume_line(); break;
   case 0: consume_line(); /* Decide if code should re-try reading, etc. */ break;
   case EOF: // Decide what to do if End-Of-File or rare Low-Level-Input-Error occurred.
}