C 如何阻止程序读取';输入';作为输入?

C 如何阻止程序读取';输入';作为输入?,c,while-loop,ascii,break,enter,C,While Loop,Ascii,Break,Enter,大家好,我刚刚完成了我的程序,它读取任何单个字符并打印该字符的ASCII值,但是当它循环时,它开始继续读取enter和其他字符 我的另一个问题是,我希望我的程序在读取“#”时停止,并将其打印为无效,我似乎无法执行此操作。代码如下所示: #include <stdio.h> int main() { char input; while (input != '#') { printf("\nEnter character: \n"); scanf("%c*c",

大家好,我刚刚完成了我的程序,它读取任何单个字符并打印该字符的ASCII值,但是当它循环时,它开始继续读取enter和其他字符

我的另一个问题是,我希望我的程序在读取“#”时停止,并将其打印为无效,我似乎无法执行此操作。代码如下所示:

#include <stdio.h>
int main() {
  char input;
  while (input != '#') {
    printf("\nEnter character: \n");
    scanf("%c*c", & input);
    printf("The ASCII value is: %d", (int) input);
    if (input == '#') break;
  }
  printf("\n# is invalid");
  return (0);
}
#包括
int main(){
字符输入;
while(输入!='#'){
printf(“\n输入字符:\n”);
scanf(“%c*c”,&input);
printf(“ASCII值为:%d”,(int)输入);
如果(输入=“#”)中断;
}
printf(“\n#无效”);
返回(0);
}

您试图用

scanf("%c*c", & input);
但是您忘记了抑制中的
%

scanf("%c%*c", & input);

应该执行您想要的操作。

您可以在第一个格式说明符后添加一个空格。它会导致程序读取任何空格(包括Enter),但不会存储它

scanf("%c ", & input);
这在下一页中有明确的解释。请参阅“参数”部分,并转到标题为“空白字符”的段落

更正我的意思是,如果我们在以下情况下在两个格式说明符之间使用空格,那么它会“吃掉”Enter或其他空格。我的错,在我上面的陈述中,它会继续要求更多的空格,因为我们在所有格式说明符之后使用空格


尝试
fflush(标准输入法)
在扫描后

这确实是一种奇怪的行为,您应该初始化
输入
。这不起作用,
扫描
将等待更多的空白字符。@EFFFE确实,它会忽略一个或多个“Enters”作为输入。但一旦输入了非空白值,在scanf()格式字符串中的空白处对应下一个格式说明符是可以接受的。仔细浏览该链接,您就会明白我的意思。如果在格式字符串中有一个%c和%d被空格分隔,那么在接受一个字符后,scanf()会忽略所有的空白(输入include)但当输入一个整数时,它被接受。我们只需要读取一个新行字符,而不是“一个或多个”。这使得程序无法使用,你试过了吗?关于您的编辑:在这种情况下,格式字符串中的空间是无效的,因为<>“%d”在读取整数之前已经消耗了任何空白字符。一个可靠的。我错了吗?请告诉我。下面是该网站中提到的关于scanf()格式字符串中的空格的内容--“空格字符:函数将读取并忽略在下一个非空格字符之前遇到的任何空格字符(空格字符包括空格、换行符和制表符--请参阅isspace)”@我个人更喜欢用上面提到的Daniel Fischer的方式来做。但是空格是另一种方式。因此我指出了它。谢谢你,它成功了。我感谢所有人的帮助
scanf("%c %d", &input1,&input2);