c语言程序 输入字符就会溢出,怎么解决? 小弟新手,请各位达人帮忙。

作者&投稿:蹉袁 (若有异议请与网页底部的电邮联系)
怎么删除偏移地址?字符串溢出怎么解决?~

你是说在语言中还是汇编?
如果反编译,用PE Editor修改就可以。

第一种方法:统计输入字符串的长度
#include
#include
int main()
{
char buff[100]={0};
printf("请输入一个字符串:");
scanf("%s",&buff);
printf("你输入字符串的个数为:%d
",strlen(buff));
}
第二种方法:遍历输入字符串,直到结束字符'\0'
#include
void main()
{
char str[1000],*p;
int word=0;
printf("请输入一个字符串:");
gets(str);
for(p=str;*p!='\0';p++)
word++;
printf("输入字符串的长度为:%d
",word);
}

输入字符和输入整数不同,用scanf接收a和b时,输入时的空格键和回车键都会作为输入字符,例如输入c,d,不会有事,输出199。但是如果接着输入e,f,就会发现结果不对,而且输出了两个值111和134。这是因为在输入时,空格键和回车键也会作为字符存入缓冲区,当第二次输入ef,scanf会自动提取上一次的回车键作为输入字符,回车键10,e是101,故输出第一个111,接着e后面有一个空格,然后是f,进行的运算时空格32 + f102,结果134。如果一定要这样循环,应该使用getch()系列的函数,不应该用scanf()~

当然输出字母就会出错,因为你的输入格式是%d,而不是%c

已修改(已调试):

注意输入中间有逗号。

#include <stdio.h>
void main()
{
int a,b,sum;
char ch1,ch2;
while(1)
{
if(scanf("%d,%d",&a,&b))
{
sum=a+b;
printf("%d\n",sum);
}
else if(scanf("%c,%c",&ch1,&ch2))
{
sum=ch1+ch2;
printf("%d\n",sum);
}
}
}

输入的时候格式要正确,输入的2个整数之间加空格就对了。程序没错误。
另外你这个while是死循环。

程序没错,错在你没对输入的东西进行检查。

#include <stdio.h>

void main()
{
int a,b;
int sum;
int i=1;
int j;
while(i==1)
{
if ((j = scanf("%d %d",&a,&b)) != 2)
{
printf("输入错误,请重新输入\n");
fflush(stdin);
continue;
}
sum=a+b;
printf("%d\n",sum);
}
}


饶阳县18682958863: c语言程序 输入字符就会溢出,怎么解决? 小弟新手,请各位达人帮忙. -
歧冰迪巧: 当然输出字母就会出错,因为你的输入格式是%d,而不是%c已修改(已调试):注意输入中间有逗号.#include <stdio.h> void main() {int a,b,sum;char ch1,ch2;while(1){if(scanf("%d,%d",&a,&b)){sum=a+b;printf("%d\n",sum);}else if(scanf("%c,%c",&ch1,&ch2)){sum=ch1+ch2;printf("%d\n",sum);}} }

饶阳县18682958863: c语言中数据溢出的问题怎么解决? -
歧冰迪巧: 因int 类型的变量的大小只有四个字节,20的阶乘太大了 所以溢出,把count改成 long long型就可以了. #include<stdio.h> void main() { int nMax; long long count; printf("Enter the integer number:"); scanf("%d",&nMax); int n,j; for(n=0;n<=nMax;n++) { count=1; for(j=1;j<=n;j++) { count*=j; } printf("%d!=%lld\n",n,count); } }

饶阳县18682958863: C语言输入字符马上输出 -
歧冰迪巧: 这个简单啊,你用getch()不就行了? 程序示例: #inlcude<stdio.h>/*这个必须要,否则编译时会提示putchar()未定义*/ main() { char c; c=getch(); putchar(c); /*如果是Win-Tc,最好在这儿加一个"getch();",停留输出画面;*/ }

饶阳县18682958863: C语言关于数据溢出 -
歧冰迪巧: 这不是数据溢出.这是由于没有指定小数位数(系统默认输出6位小数,加上2位整数,就是要输出8位数字),float只能保证7位有效数字,多余位数上的数字是无效的. 如果以%.1f或%g格式输出,就不会出这种错了. 如果改为double类型(相应地,输入语句要改为%lf格式),这样可以有15位有效数字,也不会出这种错的.

饶阳县18682958863: 请教C语言高手,你们是如何防止数据计算溢出的 -
歧冰迪巧: 1. 根据数据类型和计算结果范围,选择合适的数据类型.2. 另外一种方式就是对输入数据进行限定,保证运算不会出现越界的可能.3. 还有一些其它复杂的计算方式,这里就不给你做介绍了

饶阳县18682958863: 在c语言编程中,如何避免整数运算溢出问题 -
歧冰迪巧: C语言编译时不会检查数据溢出问题,需要编程者自行注意数据溢出问题.而且据我的经验数据溢出问题会频繁出现在初学习当中,程序写多了就很少出现这样的问题了.

饶阳县18682958863: 如何解决c语言无符号溢出问题? -
歧冰迪巧: C语言中存在两种整数算术运算,有符号型和无符号型.无符号数运算:所有无符号数运算都是以2的n次方为模,(n是结果中的位数).所以它不存在运算时的没有那种所谓的“溢出”,当它超过范围时,从零开始重新计数!当一个无符号数...

饶阳县18682958863: 想请教关于 c语言 限制输入防溢出 -
歧冰迪巧: scanf("%d %d",&a,&b) 返回值是 正确地读入 的数的个数. 这句输入2个参数,全读对了 返回值是 2.所以 不等于 2 就是输入数据(格式)错了,就要求 重新输入.

饶阳县18682958863: C语言中溢出是什么意思 -
歧冰迪巧: 1、溢出:数据类型超过了计算机字长的界限而出现的数据溢出;2、溢出可能原因:当应用程序读取用户数据,复制到应用程序开辟的内存缓冲区中,却无法保证缓冲区的空间足够时 (假设定义数组int Array[10], 而在调用时使用Array[11] 或存放的数据超过int类型容量等), 内存缓冲区就可能会溢出.3、溢出因素分析:由于C/C++语言所固有的缺陷,既不检查数组边界,又不检查类型可靠性,且用C/C++语言开发的程序由于目标代码非常接近机器内核,因而能够直接访问内存和寄存器,只要合理编码,C/C++应用程序在执行效率上必然优于其它高级语言.然而,C/C++语言导致内存溢出问题的可能性也要大许多.

饶阳县18682958863: 初级C语言数据溢出问题!
歧冰迪巧: printf("请输入第三条边长\n"); scanf("%d",&b); ------b改成c 吧 printf("总和为: %d \n",&sum); -----没有&这个... 应该就不会出现错误了...这不叫溢出...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网