for (i=1;i<=2;i++)
{
scanf("%c",&ch);
if (ch=='\n') return;
d*=10;
d+=(ch-48);
}
这样读会错
但是
while(1)
{
scanf("%c",&ch);
if (ch=='\n') return;
d*=10;
d+=(ch-48);
}
这样就不会....
能否公布一下输入数据....我崩溃啊
Orz
....必须要这样读入才不会出错..求解
void init()
{
char ch;
int i;
for (i=1;i<=4;i++)
{
scanf("%c",&ch);
stdy*=10;
stdy+=(ch-48);
}
scanf("%c",&ch);
for (i=1;i<=2;i++)
{
scanf("%c",&ch);
stdm*=10;
stdm+=(ch-48);
}
scanf("%c",&ch);
for (i=1;i<=2;i++)
{
scanf("%c",&ch);
stdd*=10;
stdd+=(ch-48) ;
}
scanf("%c",&ch);
while (1)
{
scanf("%c",&ch);
if (ch=='\n') break;
stdw*=10;
stdw+=(ch-48);
}
while (1)
{
scanf("%c",&ch);
if (ch=='\n') break;
w*=10;
w+=(ch-48);
}
while(1)
{
scanf("%c",&ch);
if (ch=='\n') break;
d*=10;
d+=(ch-48);
}
stdw%=7;
w%=7;
}
数据是不是前后都会多几个0啊!....
var
n,y,r,r2,x2,xq:integer;
rq:string;
function day(n,y:integer):integer;
begin
case y of
1,3,5,7,8,10,12: day:=31;
4,6,9,11: day:=30;
2: if (n mod 4=0)and(n mod 100<>0) or (n mod 400=0) then
day:=29
else day:=-28;
end;
end;
function sum(n,y:integer):integer;
var
i:integer;
begin
sum:=0;
for i:=1 to y-1 do
sum:=sum+day(n,i);
end;
procedure print(n,y:integer);
var
yy,rr:string;
begin
str(y,yy); if length(yy)<2 then insert('0',yy,1);
str(r2,rr); if length(rr)<2 then insert('0',rr,1);
write(n,'-',yy,'-',rr);
end;
procedure cs(n,y,r,x1:integer);
var
i:integer;
begin
x1:=8-((sum(n,y)+r+7-x1)mod 7);
if ((sum(n,y)+r2+x1-1)mod 7=x2)and(r>r2) then
begin
print(n,y);
exit;
end
else
for i:=y-1 downto 1 do
if (sum(n,i)+r2+x1-1)mod 7=x2 then
begin
print(n,i);
exit;
end;
cs(n-1,12,31,x1-1);
end;
begin
readln(rq);
readln(xq);
readln(x2);
readln(r2);
x2:=x2 mod 7;
val(copy(rq,1,4),n);
val(copy(rq,6,2),y);
val(copy(rq,9,2),r);
cs(n,y,r,xq);
end.
其实楼主可以这样读入的,C/C++是允许的。
scanf("%ld-%ld-%ld",&y,&m,&d);