c语言中OJ对scanf!=EOF的处理

#include
int main(){
char ch;
while (scanf("%c",&ch)==1);
printf(ch%2?"ji\n":"ou\n");
return 0;
}
这是代码,判断一个超级大的数的奇偶 放到OJ上是对的 那为什么OJ输入数据后会知道怎么停下来读取而不是超时?有大神能解答一下嘛~

2个回答

EOF并不能被char读入

wingrez
wingrez 回复因爱而生灬: scanf()会对EOF做处理,返回-1,此时不满足循环条件,退出循环
接近 2 年之前 回复
wingrez
wingrez 回复因爱而生灬: OJ会在测试数据后面加入一个EOF。这个程序逐个读入字符,直到最后一个字符(EOF不能读入),对最后一个字符作处理。
接近 2 年之前 回复
hansong_yeah
因爱而生灬 嗯 我指的是上面那个代码 OJ是如何停下来的
接近 2 年之前 回复

while(scanf("%d", &a) != EOF)
{

}

在数据全部测试过后会给你的程序发送一个ctrl+z你的程序就停下来了。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C语言中的EOF
  EOF 一般出现在 while ...EOF中输入时,如果题目没有给定输入的结束条件,那么就默认读取到文件末尾。  scanf函数是有返回值的,返回值为其成功读入的参数的个数,如scanf("%d",&n)成功读入一个整数,那么scanf返回值为1.读入失败只会出现在读取文件到达文件末尾导致无法读取时,这时scanf函数会返回-1而不是0,C语言中使用EOF(即End Of File)...
C语言中EOF
C语言在读取文件时到达文件末尾导致的无法读取现象,会导致读取失败。这时scanf函数会返回-1而不是0,且C语言中使用EOF(End Of Flie)来代表-1
c语言中的scanf
在c语言的日常应用和学习中 ,我们时常要用到scanf,但是,作为初学者的我们,在使用scanf的时候时常会出问题。 1.在输入的时候字符要与scanf中的字符一一对应,例如:scanf(“a的值为%d,b=%d”,&a,&b); 我们在输入的时候就应当输入如“a的值为1,b=0”,注意要一一对应。 2.在电脑端连续输入数字的时候,例如:scanf(“%d%d%d”,&amp...
C语言中EOF什么意思
在C语言中,或更精确地说成C标准函数库中表示文件结束符(end offile)。 在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~127,不可能出现-1,因此可以用EOF作为文件结束标志。 举例:C语言,输入多组数据,每行两个,然后对应每行一个输出结...
c语言中检测EOF
目的:检验getchar()!=EOF是否为1rn代码:#includern main()rn rn int c;rn while(c=getchar()!=EOF)rn printf("%d",c);rn rn问题:程序无法结束?rn到底怎么回事呀?
C语言中对scanf输入非法字符的检查和处理
在C中scanf()函数返回成功读入的变量的个数。如果它没有读取任何项目(输入非法字符,例如:希望得到数字,而用户却输入的是字符),scanf()返回值为0.当检测到“文件结尾”是,会返回EOF(EOF是在文件stdio.h中定义的特殊值,一般,#define指令把EOF的值定义为-1). 利用scanf()以上的性质,可对输入值进行检验,代码如下:     #include<std...
C语言中的scanf的使用
感谢大家分享,今天在查阅了一些资料之后,终于直观的搞懂了C语言中的scanf的工作机制,以及经常遇到的各种奇葩问题。 scanf的工作机制 了解其工作机制,才能知晓其外表下的内在原因,总是有道理的。 scanf()函数的工作过程可以简单描述为如下过程: 只有当输入回车键的时候,scanf()才开始工作。 文字描述为: 为了提高存储器访问效率,操作系统的缓冲区管理机制,键盘输入的
C语言中的scanf的用法。
scanf("%d//%d",&a,&b);n为什么这句加了//就能用a/b这种输入格式????n求大神告诉
C语言中scanf的问题
本人在数据结构调试过程中遇到不解问题,关于scanf语句的问题rn1void DelNode(LinkList head)rn2rn3 char jx;rn4 ListNode *p,*q;rn5 char num[5];rn6 char name[9];rn7 p=head;rn8 if (p==NULL) rn9 printf("No data!\n");rn10 return ;rn11 rn12 printf("==================\n");rn13 printf(" 1.num delete \n");rn14 printf(" 2.name delete \n");rn15 printf("==================\n");rn16 printf("delete(y/n?): \n");rn17 scanf("%c",&jx);rn18 if ((jx=='y')||(jx=='Y'))rn rn q=head;rn while ((q!=NULL)&&(q->next!=p))rn q=q->next;rn q->next=p->next;rn free(p);rn printf("already delete!\n");rn rn rn rn为什么在18行处没有停下来提示输入jx而是直接执行下面了呢?rn记得似乎以前在教科书看过,有些印象,但是现在一时找不到了,希望得到大家的帮忙,谢谢了!
C语言中scanf问题
scanf
C语言中scanf()和缓冲区
scanf()函数定义: if (缓冲区为空) 调阻塞函数; 调赋值函数; 执行下面的代码 for (i = 0;i { scanf("%c",&ch); printf("%c",ch); } 代码执行过程: 1、调用第一个scanf()后,缓冲区为空,调用阻塞; 2、例如输入abcd(回车符)到缓冲区(回车符表示结束阻塞); 3、调赋值,将ch = a;并
C语言中的"scanf"的介绍
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() {     char s[100] = { 0 };     scanf("%s",s);//"%"的作用就是输入一个字符串,scanf是以回车键作为输入完成的标示,但回车键本身并不会作为字符串的一部分     //如果scanf参数中的数组的长度小于用户在键...
c语言中 scanf的疑问
求解!!!rnchar cChar[10];rnscanf("%s",cChar);rn这行能理解,数组名代表数组的首地址,可是为什么把上面第二行改成scanf("%s",&cChar);加个取地址符号编译也能通过;有哪位大神能知道这是为什么吗?cChar已经代表首地址了,再加个取地址符是怎么回事?谢谢各位[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/9.gif][/img][img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/15.gif][/img]
C语言中对单个数字的处理
对单个数字的处理 如有这样一个题目: 输入一个数字,1.输出它有几位数,2.倒序输出,3.正序输出。 先是第一问,输出它有几位数。 如果明确是个小于五位数的数,对初学者来说可能就用嵌套式的if语句依次对1000,100,10,1整除,首先在哪个位置不等于0那就输出对应是几位数。这种方法当然可行也是正确的,但五位数还好,要是来个二十多位的数还要一个一个if语句的嵌套下去么? 其余几个问题也是如此,当...
C语言中对数字的处理
   给一个正整数,要求:①求出它是几位数;②分别输出每一位数字;③按逆序输出各位数字,例如原数为321,应输出123。#include<stdio.h>int GetFigures(int n)//①{ int count = 0; if (n == 0) { return 1;//0的位数是1 } do { n /= 10; count++; } while (n != 0)...
c语言中的EOF的用法 求教
在c语言中系统把eof作为文件的结束标志,是不是就是可以这样理解系统在我们的文件结尾在了一个eof标志(-1),那这个标志是不占有内存的吗??
C语言中的EOF的浅识
初学C语言,经常会碰到文本结束符EOF(即end of file),其类型大小大于字符型,其重要作用之一在于判断输入文本是否结束。 为什么可以这样做呢? 因为字符型数据对应为无符号8位二进制,即从00000000~11111111(0~255),而EOF显然在范围之外,故能判断字符是否输入结束。 在Windows下,EOF的输入为Ctrl+Z. 1.验证表达式 getchar() != E
C语言中哪个键代表EOF???
C语言中哪个键代表EOF???
c语言中EOF是什么意思
#include "stdio.h"rn#include "math.h"rnrnmain()rnrn int num,ctrn,ln,un,spn,n;rn char ch;rn num=0;rn ctrn=0;rn ln=0;rn un=0;rn spn=0;rn n=0;rn printf(" 字符统计\n\n");rn rn while((ch=getchar())!=EOF)rn rn if(iscntrl(ch))rn ctrn++;rn else if(isdigit(ch))rn num++;rn else if(islower(ch))rn ln++;rn else if(isupper(ch))rn un++;rn else if(isspace(ch))rn spn++;rn elsern n++; rn rn printf("控制字符有%d个\n",ctrn);rn printf("数字有%d个\n",num);rn printf("小写字母有%d个\n",ln);rn printf("大写字母有%d个\n",un);rn printf("空格符有%d个\n",spn);rn printf("其他符有%d个\n",spn);rnrn while((ch=getchar())!=EOF)是什么意思???rn 求高人解答
关于c语言中EOF的使用
我写了一个小程序,用于计算输入字符的数量rn#include rnmain()rnrn long nc;rn nc = 0;rn while (getchar() != EOF)rn ++nc;rn printf("%ld\n",nc);rnrnrn请问当程序运行后,输入一些字符后,如何输入“EOF”标志结束,使程序继续运行???rnrn
EOF 在C语言中怎么实现
在进行字符输入的时候rn怎么才能够达到这个条件rnc = (getchar() != EOF)rn
C语言中关于获取EOF的坑
首先简述一下我的编程环境采用WIN10系统,编译器是编译设置是在一次做一道蓝桥杯编程题时我遇到了一个坑那就是需要获取文件结束符EOF一开始我以为可以用while(scanf("%c",&c),c!=EOF)这种方法获取然后我发现获取不到,通过不了样例数据然后我查询网上的资料,一开始发现都是获取字符然后与EOF对比,但是他们的代码可行,我的却不行然后我发现他们获取字符的方式是c=getcha...
C语言中scanf()和printf()的返回值问题
C语言中scanf()函数的返回值是成功赋值的变量的个数,假设:  int a,b;  scanf("%d, %d",&a,&b); 如果你输入:m,30  scanf()函数首先为变量a赋值,而变量a是整形而你输入的是字符m,所以a没有被成功赋值,scanf()函数跳出,导致变量a,b均没有被成功赋值,scanf()返回值为0. 如果你输入:30,m  那么scanf()函数的返回值就是
C语言中scanf的奇怪问题
各位大侠,今天写了一个小程序,发现了一个无法理解的问题,当两个scanf放在一起,且第一个scanf中输入格式为“%lf%c%lf”的时候,第二个scanf中输入格式“%c”时,第二个scanf无效,请大侠指点,非常感谢。rn运行环境为rnLSB Version: :core-3.0-ia32:core-3.0-noarch:graphics-3.0-ia32:graphics-3.0-noarchrnDistributor ID: RedHatEnterpriseASrnDescription: Red Hat Enterprise Linux AS release 4 (Nahant Update 7)rnRelease: 4rnCodename: NahantUpdate7rnrnGCC版本:rngcc version 3.4.6 20060404 (Red Hat 3.4.6-10)rnrn程序代码如下:rnrn#include rnrnint main(void)rnrn char a=0;rn char b=0;rn double c=0.0;rn double d=0.0;rnrn scanf("%lf %c %lf",&c,&a,&d);rn printf("\na=%c,c=%lf,d=%lf\n",a,c,d);rn scanf("%c",&b);rn printf("b=%c\n",b);rnrn return 0;rn
c语言中的数组问题和scanf问题
1.数组。rn不能定义a[],必须定义为a[n];才可以。rnC语言不是可以定义a[]吗?在linux系统下不行吗?或者需要怎么样调整一下?rn2.scanf问题。rn如 scanf("%d \n", &n);则在运行的时候会让你输入两次数值才可以(实际上第一次输入的数值被赋给n,然后需要再次输入回车后,程序才继续),为什么?rnrn谢谢!
C语言中while循环带上scanf语句
各位老师,本人新手上路,碰到下面的问题困扰:rn 语句目标为:输入字母,判断是否为A或者B,如果是,跳出循环,如果不是,继续输入rn 循环相关程序如下:rn char sp;rn while (1)rn rn scanf("%c",&sp);rn if (sp == A || sp == B)rn break;rn printf("输入有误,请重输:\n,%c",sp);rn printf("%c",sp);rn rn 此循环无法生效,然后我改成后面的,发现到scanf处就失效:rn char sp = ‘c’;rn while (1)rn rn if (sp == A || sp == B)rn break;rn printf("输入有误,请重输:\n,%c",sp);rn printf("%c",sp);rn scanf("%c",&sp);rn rn rn是否while循环里面是不能使用scanf函数的,我应该怎么改才能正确运行.rnrnrnrnrn后面我发现了加上getchar后就没问题了rn scanf("%c",&sp);rn getchar();rn while (1)rn rn if (sp == 'A' || sp == 'B')rn break;rn printf("输入有误,请重输:");rn scanf("%c",&sp);rn getchar();rn rn 希望老师们解释下
C语言中的危险函数scanf
scanf在VS编译器中提醒为危险函数,这不是危言耸听,scanf有着许多的坑,一不小心就会出错,且找错过程麻烦 我们使用VS输入scanf函数的时候,VS会给我们报错,说这个函数不安全,建议使用scanf_s代替(其实scanf_s也不怎么样),这时我们如果想要去掉这个报错就需将报错信息给我们提供的_CRT_SECURE_NO_WARNINGS宏定义添加到代码段首,即 我们就可以继续...
C语言中scanf与getchar的用法
最近看C语言书,看到getchar()函数后,和scanf()函数有点混淆,下面就来区分一下这两个函数吧。 1.首先看一下scanf的用法 char s; scanf("%s",&s); 函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理。 2.getchar的用法 int ch; ch = getchar(); putch...
C语言中gets()函数与scanf()函数
#include<stdio.h> int main() {     char s[100] = { 0 };     gets(s);//对于get(s)来说,只有回车键才是结束的标识,空格不是输入结果标识,所以用gets这个函数就可以实现输入带空格的字                  //符串                //但是get(s)和scanf一样存在内存溢出的缺陷...
请教在c语言中的scanf格式
struct studentrn int num;rn char name[20];rn float score;rn ;rn struct student stu[4];rnfor(i=0;i<4;i++)rn scanf("%d%s%f",&stu[i].num,stu[i].name,&stu[i].score);rnfor(i=0;i<4;i++)rn printf("%d%s%f",stu[i].num,stu[i].name,stu[i].score);rn这段程序在输入时应该怎么输入呢,数据以空格还是其他符号隔开,我试了好几种都不行啊,总是得不到正确的输出结果,而要是单独输入一条记录就是对的,把score定义成int型也是对的,这是为什么呢?提示错误: scanf:floating format not linking。请教哪位高手能帮我!谢谢!
C语言中scanf()函数的小结
1.scanf()的返回值 scanf函数是有返回值的,接受一个变量返回1。 如:c=scanf(&quot;%d%d&quot;,&amp;amp;a,&amp;amp;b); 若输入的全是整数,则c为2; 若全是字符,则c为0; 因为scanf在占位符存在的情况下,只接受符合占位符的数据。 2.scanf的结束 如果不是%c,则以空格,回车,tab键结束,或非法字符结束; 当为%c时,以回车结束,会把回车传值给变...
c语言中的scanf输入语句的问题
源程序如下:rn#include rnmain()rn int i=0;rn while(i!=3)rn printf("Input:");rn scanf("%d",&i);rn rn return 0;rnrn如果输入一个字符,那么程序将进入死循环,为什么?怎样避免???
C语言中scanf、gets、fgets的区别
1.scanf会读取标准输入缓冲区中的输入行内容直到遇到回车或空白(回车、tab、空格)以换行为例,会把换行符之前的数据全部读入到scanf指定的变量中,回车(\n)依然保存 在缓冲区中,等待下次读取标准输入缓冲区 遇到上面这种情况一般需要加入一下代码来清空缓存区的行 /* 这里getchar()从缓冲区中读一个字符,直到读取到回车结束,由于getchar()没有设置变量保
关于c语言中scanf返回值的问题
//如下面这个代码: scanf("%d %d",&amp;a,&amp;b); //如果用户成功输入a和b的话scanf的返回值就为2. //如果只有一个成功输入返回值为1. //如果a和b都没有输入则返回值就为0. //如果遇到错误则返回值为-1. 可以利用返回值来做一些输入的判断!!!! ...
C语言中scanf与printf的区别
之前没学过C语言,只学过C++,所以就来自学下C语言了,其实个人认为C与C++的区别很小,基本上就是printf与scanf这点输出和输入的区别了,如果还有什么区别的话那就是要包含的头文件是不同的。比如在C++中,是#include.而在C中是#include&lt;stdio.h&gt; 在调用printf与scanf的时候一定要包含#include&lt;stdio.h&gt; printf的...
C语言中scanf格式的一个小问题
有下列一段程序:rn[color=#FF0000][code=C/C++]int x,y;rnchar c1,c2;rnscanf("%d%c%d%c",&x,&c1,&y,&c2);rnprintf("%d%c%d%c \n",x,c1,y,c2);[/code][/color]rnrn要想输出为123 x 456 y,正确的输入方式是什么?rnrn本人在VC2008和C-free5.0下测试了一下都没有成功,如果加空格的话,总是乱码。rnrn给出的答案是123x 456y。但是我在VC2008和C-free5.0下键入123x 456y(Enter)后,rn得到的结果是123x456y,而与题目要求的123 x 456 y不一致,想和大家讨论一下,到底是什么原因?rn会不会是编译器的原因呢?
c 语言中的scanf相关问题
程序中有一段如下:rnprintf("请输入学生姓名:");rnscanf("%s",stu.name);rnprintf("请输入学生出生日期:");rnscanf(" %c",&stu.sex);rn为什么%c前要有空格?
C语言中scanf输入的问题
要求:先输入整数n,表示要输入n组数据。然后依次输入者n组数据。rn比如我输入3后系统会自动让输入三组数据,然后每组数据还要换行。样例:[img=https://img-bbs.csdn.net/upload/201408/28/1409221336_458288.jpg][/img]rn但是用scanf的时候一按回车键scanf就会自动结束,这个问题困扰小弟好久了,希望各位老师指点一二。rn还有就是换行输入后这些数据是怎么储存的,该怎么使用?
关于C语言中的scanf()函数
在《C Primer Plus》中有如下代码: ...... while(scanf(&quot;%d&quot;, &amp;amp;num)) { ... } ...... 当输入不是整数的时候就停止循环 那么是不是也可以试试这样呢? ...... while (scanf&quot;%d&quot;, num)==0) { printf (&quot;You're wrong! Enter a number please: &quot;); } ........
C语言中scanf要写两次的问题
C语言的数据结构顺序表的代码问题:为什么其中主函数要写两个scanf才可以正常运行rnrnrnrnrn#includern#includernrn#define OK 1rn#define ERROR 0rn#define OVERFLOW -2rn rn#define MAXSIZE 100rntypedef int ElemType;rntypedef int Status;rnrntypedef structrn ElemType elem[MAXSIZE];rn int length;rnSqList;rnSqList L;rnrnint main()rnrn int InitList();//顺序表的初始化 构造一个空的顺序表Lrn int LocateElem();//顺序表的查找rn int ListInsert();//顺序表的插入rn int ListDelete();//顺序表的删除rnrn char ch;rn InitList();//顺序表的初始化 构造一个空的顺序表Lrn printf("\n");rn printf("输入A执行查找操作\n输入B执行插入操作\n输入C执行删除操作\n");rn printf("\n输入想要的操作选择:");rn scanf("%c",&ch); [color=#FF00FF]//此处要写两个scanf才能运行[/color]rn scanf("%c",&ch); rn switch(ch)rn rn case'A':LocateElem();break;rn case'B':ListInsert();break;rn case'C':ListDelete();break;rn default:putchar('\a');rn rnrnrn getch();rnrn return 0;rnrnrnint LocateElem()//顺序表的查找rnrn int LocateElem_Sq(ElemType e);//顺序表的查找rn int B;rn ElemType b;rn printf("输入要查找的数b:");rn scanf("%d",&b);rn B=LocateElem_Sq(b);//顺序表的查找rn if(B==0) printf("找不到输入的数!!!\n");rn else printf("要查找的数b:%d是顺序表的第%d个数!!\n",b,B);rn return 0;rnrnrnStatus InitList_Sq()//顺序表的初始化 构造一个空的顺序表Lrnrn L.length=0;rn return OK;rnrnrnint LocateElem_Sq(ElemType e)//顺序表的查找rn rn //ElemType e;rn int i;rn for(i=0;iL.length+1) //i值不合法,合法范围是1<=i<=L.length+1rn rn printf("参数i值不合法!!!\n");rn return ERROR;rn rn if(L.length==MAXSIZE) //当前存储已满rn rn printf("表已满无法插入!!!\n");rn return ERROR;rn rn for(j=L.length-1;j>=i-1;j--)//j从最后一个开始,到第i个L.elem[i-1]rn L.elem[j+1]=L.elem[j];rn L.elem[i-1]=e;rn L.length=L.length+1;rn return OK;rnrnrnStatus ListDelete_Sq(int i,ElemType e)//顺序表的删除rnrn int j;rn if(L.length==0)rn rn printf("表已空无法删除!!!\n");rn return ERROR;rn rn if(i<1||i>L.length) rn rn printf("参数i值不合法!!!\n");rn return ERROR;rn rn e=L.elem[i-1];rn for(j=i;j<=L.length-1;j++)rn L.elem[j-1]=L.elem[j];rn L.length=L.length-1;rn return OK;rnrnrnvoid Shuru()//单链表的建立rnrn ElemType i;int m;rn printf("输入建立单链表的长度[<=100]:");rn scanf("%d",&m);rn printf("用空格隔开输入要建立单链表的%d个数的值:\n",m);rn for(i=0;i
相关热词 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法