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.
}