main()
{
int logic;
long num;
logic=1;
while(logic)
{
printf("input a number:\n");
scanf("%ld",&num);
if((num<0)||(num>99999))
printf("Input error,please input again:");
else
logic=0;
printf("\n");
}
}
12 个解决方案
#1
一个字符的内存是 1 个字节
和long所占用内存大小都不一样、
输入一个字母,占了低位的8个bit 01000000 (只是一个比方)
那么高位用什么来填充,是不确定的,
。。。
没有按照要求来输入字符,(非法字符的出现) 的情况下
我觉得任何解释都不会太恰当
和long所占用内存大小都不一样、
输入一个字母,占了低位的8个bit 01000000 (只是一个比方)
那么高位用什么来填充,是不确定的,
。。。
没有按照要求来输入字符,(非法字符的出现) 的情况下
我觉得任何解释都不会太恰当
#2
当然最好的补救办法就是:
对非法字符进行过滤
对非法字符进行过滤
#3
scanf("%ld",&num);
flushall();
flushall();
#4
scanf("%ld",&num);
==>
if (scanf("%ld",&num)==0)
flushall();
==>
if (scanf("%ld",&num)==0)
flushall();
#5
你定义了一个long型的num,在32位机内它占4个字节,但char只占一个字节,把一个char赋给一个long型,得到的num是一个随机数,所以会导致循环出现.
#6
tailzhou(尾巴)
能不能具体指点一下,flushall()有什么作用?什么时候用?
#7
函数名: flushall
功 能: 清除所有缓冲区
用 法: int flushall(void);
程序例:
#include <stdio.h>
int main(void)
{
FILE *stream;
/* create a file */
stream = fopen("DUMMY.FIL", "w");
/* flush all open streams */
printf("%d streams were flushed.\n",
flushall());
/* close the file */
fclose(stream);
return 0;
}
功 能: 清除所有缓冲区
用 法: int flushall(void);
程序例:
#include <stdio.h>
int main(void)
{
FILE *stream;
/* create a file */
stream = fopen("DUMMY.FIL", "w");
/* flush all open streams */
printf("%d streams were flushed.\n",
flushall());
/* close the file */
fclose(stream);
return 0;
}
#8
补:
返回值:返回被清楚的缓冲区的数目
详细说明:
1.函数将所有输入缓冲区清空,所有其后的输入函数都需要重新重文件读入新数据。
2.函数将所有输入缓冲区的内容写入对应的文件中,
返回值:返回被清楚的缓冲区的数目
详细说明:
1.函数将所有输入缓冲区清空,所有其后的输入函数都需要重新重文件读入新数据。
2.函数将所有输入缓冲区的内容写入对应的文件中,
#9
我都是查函数手册的。具体有什么用我还不太清楚。有待tailzhou(尾巴) 解答
#10
#include <stdio.h>
int main(int argc ,char** argv)
{
int logic;
long num;
num=-1;
logic=1;
while(logic)
{
num=-1;
printf("input a number:\n");
fflush(stdin);
scanf("%ld",&num);
if((num<0)||(num>99999))
{ printf("Input error,please input again:");
logic=1;
}
else
{
logic=0;
}
printf("\n");
}
}
int main(int argc ,char** argv)
{
int logic;
long num;
num=-1;
logic=1;
while(logic)
{
num=-1;
printf("input a number:\n");
fflush(stdin);
scanf("%ld",&num);
if((num<0)||(num>99999))
{ printf("Input error,please input again:");
logic=1;
}
else
{
logic=0;
}
printf("\n");
}
}
#11
输入字母的时候
scanf("%ld",&num)读取不到num的值,输入的字母一直存在缓冲区里面。
所以造成了死循环,
用flushall把缓冲区的内容清除就可以了。
scanf("%ld",&num)读取不到num的值,输入的字母一直存在缓冲区里面。
所以造成了死循环,
用flushall把缓冲区的内容清除就可以了。
#12
谢谢了,都是高手,我要好好学学了。
#1
一个字符的内存是 1 个字节
和long所占用内存大小都不一样、
输入一个字母,占了低位的8个bit 01000000 (只是一个比方)
那么高位用什么来填充,是不确定的,
。。。
没有按照要求来输入字符,(非法字符的出现) 的情况下
我觉得任何解释都不会太恰当
和long所占用内存大小都不一样、
输入一个字母,占了低位的8个bit 01000000 (只是一个比方)
那么高位用什么来填充,是不确定的,
。。。
没有按照要求来输入字符,(非法字符的出现) 的情况下
我觉得任何解释都不会太恰当
#2
当然最好的补救办法就是:
对非法字符进行过滤
对非法字符进行过滤
#3
scanf("%ld",&num);
flushall();
flushall();
#4
scanf("%ld",&num);
==>
if (scanf("%ld",&num)==0)
flushall();
==>
if (scanf("%ld",&num)==0)
flushall();
#5
你定义了一个long型的num,在32位机内它占4个字节,但char只占一个字节,把一个char赋给一个long型,得到的num是一个随机数,所以会导致循环出现.
#6
tailzhou(尾巴)
能不能具体指点一下,flushall()有什么作用?什么时候用?
#7
函数名: flushall
功 能: 清除所有缓冲区
用 法: int flushall(void);
程序例:
#include <stdio.h>
int main(void)
{
FILE *stream;
/* create a file */
stream = fopen("DUMMY.FIL", "w");
/* flush all open streams */
printf("%d streams were flushed.\n",
flushall());
/* close the file */
fclose(stream);
return 0;
}
功 能: 清除所有缓冲区
用 法: int flushall(void);
程序例:
#include <stdio.h>
int main(void)
{
FILE *stream;
/* create a file */
stream = fopen("DUMMY.FIL", "w");
/* flush all open streams */
printf("%d streams were flushed.\n",
flushall());
/* close the file */
fclose(stream);
return 0;
}
#8
补:
返回值:返回被清楚的缓冲区的数目
详细说明:
1.函数将所有输入缓冲区清空,所有其后的输入函数都需要重新重文件读入新数据。
2.函数将所有输入缓冲区的内容写入对应的文件中,
返回值:返回被清楚的缓冲区的数目
详细说明:
1.函数将所有输入缓冲区清空,所有其后的输入函数都需要重新重文件读入新数据。
2.函数将所有输入缓冲区的内容写入对应的文件中,
#9
我都是查函数手册的。具体有什么用我还不太清楚。有待tailzhou(尾巴) 解答
#10
#include <stdio.h>
int main(int argc ,char** argv)
{
int logic;
long num;
num=-1;
logic=1;
while(logic)
{
num=-1;
printf("input a number:\n");
fflush(stdin);
scanf("%ld",&num);
if((num<0)||(num>99999))
{ printf("Input error,please input again:");
logic=1;
}
else
{
logic=0;
}
printf("\n");
}
}
int main(int argc ,char** argv)
{
int logic;
long num;
num=-1;
logic=1;
while(logic)
{
num=-1;
printf("input a number:\n");
fflush(stdin);
scanf("%ld",&num);
if((num<0)||(num>99999))
{ printf("Input error,please input again:");
logic=1;
}
else
{
logic=0;
}
printf("\n");
}
}
#11
输入字母的时候
scanf("%ld",&num)读取不到num的值,输入的字母一直存在缓冲区里面。
所以造成了死循环,
用flushall把缓冲区的内容清除就可以了。
scanf("%ld",&num)读取不到num的值,输入的字母一直存在缓冲区里面。
所以造成了死循环,
用flushall把缓冲区的内容清除就可以了。
#12
谢谢了,都是高手,我要好好学学了。