c语言switch语句用法问题,银行利息 请路过大神帮忙看看哪里错了 谢谢大神了😂

c语言问题,帮忙看一个程序,看错误出在什么地方,谢谢。_百度知道
c语言问题,帮忙看一个程序,看错误出在什么地方,谢谢。
程序的功能是在输入的一个字符串中将连续的数字作为一个整数存放到一数组中,并输出,而且要统计有多少个整数,输出。
我觉得下面的程序没有问题啊,怎么就得不出正确的结果呢???
#include &stdio.h&
#include &string.h&
void main()
char st...
我有更好的答案
if((*(pstr+i)) &gt.h&int main(){
char str[50];
}&#47.\nThey are:\
k = 0,digit); pn= for(i=0;i++)
while(kn&k)
for(e=1; int i, 输入包含数字的字符串
printf(& && (*(pstr+i))&='9')
k++;/ 输出结果
printf(&The string has %d numbers.\nT#include &stdio.h&);%d &;
/ 遇到非数字字符
//=',numberCounter);
//numberC0'/ 保存找到过的数字
number[numberCounter++] = tempN0)
number=*(pstr+i-1)-'0';i++) {
//*程序的功能是在输入的一个字符串中将【连续的数字作为一个整数】存放到一数组中,并输出,而且要统计有多少个整数,输出;
for(i=0;i&int main(){
char str[50];
number[10];0'string.h&#include & 遇到数字字符
if(str[i] &gt,*(pn+i)); } printf(&&#92.\n& 临时变量清零
tempNumber = 0;
/&#47!='/ 注意下面 4 条语句放的位置
pn++,k。 */#include & gets(str); pstr= i = 0 ; k = 0 ; digit=0;
gets(str);
tempNumber = 0;
numberCounter = 0;/ 标记找到了数字
hasNumber = 1;
// ----------------------------------------------------------------------// else
}/The string has % 在遇到非数字字符之前找到过数字
if(hasNumber)
= 0:\n& while(*(pstr+i)!='\\0') printf(&='
number=number+(*(pstr+i-1-kn)-'
for(i=0;str[i],numberCounter=0;9' 重新标记为没有找到数字
hasNumber = 0;
&#47.\n&/ while(*(pstr+i); 连续数字组合成整数
tempNumber = tempNumber*10 + (str[i] -'0');
//n&); return 0;}/*@@123abc 456 def 5 6 7 a b c*&#47,*pstr/e&=e++)
e10=e10*10;0' int
num[10],number[i]);
printf(&\0'}/)*e10;n&);
return 0;i&i++) {
printf(&/ if(k&gt。。;P
digit++!='
}/\0';%d &; && str[i] &= &#39。*/);n&;
&#47,*pn =*@@123abc 456 def 5 6 7 a b c*/;Please input a string,kn,e,e10,printf(&quot.h&#include &*简介点的版本
// 注意下面 4 条语句放的位置
k = 0; 这是为什么啊?位置???
你把我放到位置和你自己放的位置比较一下。// 你的放法 while(*(pstr+i)!='\0'){
if((*(pstr+i)) &='0' && (*(pstr+i))&='9') {
... } else {
i++;}// 正确的放法
while(*(pstr+i)!='\0'){
if((*(pstr+i)) &='0' && (*(pstr+i))&='9') {
... } else {
i++;}知道为什么你思路对的,语句的位置会放错了么?因为你的代码【没有对齐】!你看不清楚 if ...else , while ... 他们在那里结束!良好的代码习惯会让你收益良多的。
嗯,这样是对的。但又出现一个问题,就是求出的整数的个数要比实际的少一个啊,比如输入a123x456b789
有2个整数,为 123
而789没有,这又是为什么呢?
/*程序的功能是在输入的一个字符串中将【连续的数字作为一个整数】存放到一数组中,并输出,而且要统计有多少个整数,输出。*/#include &stdio.h&#include &string.h&int main(){
char str[50],*
num[10],*pn =
int i,number,k,kn,e,e10,printf(&Please input a string.\n&);
gets(str);
while(*(pstr+i)!='\0')
if((*(pstr+i)) &='0' && (*(pstr+i))&='9')
number=*(pstr+i-1)-'0';
while(kn&k)
for(e=1;e&=e++)
e10=e10*10;
number=number+(*(pstr+i-1-kn)-'0')*e10;
// 注意下面 4 条语句放的位置
}// if(k&0)
/****************
注意整数出现在字符串末尾的情形(如:a123x456b789)。
因为判断 '\0' 后退出了,这样就【并没有】把这个整数存储进去
所以在退出循环的时候还要判断一下哦!
*****************/
// 特殊处理整数出现在末尾的情形
number=*(pstr+i-1)-'0';
while(kn&k)
for(e=1;e&=e++)
e10=e10*10;
number=number+(*(pstr+i-1-kn)-'0')*e10;
// 注意下面 4 条语句放的位置
digit++; }// if(k&0)
printf(&The string has %d numbers.\nThey are:\n&,digit);
for(i=0;i&i++)
printf(&%d &,*(pn+i));
printf(&\n&);
return 0;}/*@@123abc 456 def 5 6 7 a b ca123x456b789*/
采纳率:53%
来自团队:
我也不知道哪里错了
k=0; i++;k不应该在执行每次循环后就清零吧?
程序定义了不少无意义的变量,读起来也费解。举个例子吧,当输入mai123456时,执行第一次循环时,由于*(pstr+i)!='\0'而执行else部分,又由于此时k还为0,而执行if语句之后*pn=,number并未被初始化,就被放入num数组中了。先找个例子试着在纸上逐步运行你的程序吧,也有助于你发现错误。
写程序要注释!!!你的程序看的头痛,我就在你的基础上改了,程序源代码要的是可读性,你这根本就没有,具体解决过程 你自己对照你的看看吧我修改的基本的都给了注释int swap(char c){ switch(c) { case '0':
return 0; case '1':
case '2':
return 2; case '3':
case '4':
return 4; case '5':
case '6':
return 6; case '7':
case '8':
return 8; case '9':
return 9; }}//以下代码加在main char str[50],*
int i,k,kn,
i=0;k=0;digit=0;//kn=0;
printf(&Please input a string.\n&);
gets(str);
while(*(pstr+i)!='\0')
if((*(pstr+i)) &='0' && (*(pstr+i))&='9')
*(num+k) = swap(*(pstr+i));//对NUM进行赋值 需要转换
k++;//数字的POS
digit++;//计数器
/*这里实在是没有必要
{ number=*(pstr+i-1)-48;
while(kn&k)
for(e=1;e&=e++)
e10=e10*10;
number=number+(*(pstr+i-1-kn)-48)*e10;
printf(&The string has %d numbers.\nThey are:\n&,digit);
for(i=0;i&i++)
printf(&%d &,*(pn+i));
printf(&\n&);
#include &stdio.h&//没有注释的程序不是好程序,特别是用简单字母定义了一些变量,更需要注释#include &string.h&//为了防止数组越界,请你测试时输入的数字少于10个void main(){
char str[50],* int num[10]={0},*//数组全部初始为0// pn=//在定义变量之前不能执行任何操作,除非赋初值 int i,k,kn,e,e10, //把数字字符转为一位整数 int nc=0;//整数个数统计,也作为num[]的下标 int flag=0;//0标记字符不是数字,1标记字符是数字 i=0; k=0;//表示连续数字字符的位数 digit=0; kn=0; printf(&Please input a string.\n&); gets(str); pstr= str[49]='\0';//防止越界 printf(&有效字符串是:
\n&,str);// while(*(pstr+i)!='\0') {
if((*(pstr+i)) &='0' && (*(pstr+i))&='9')
c=*(pstr+i)-48;//发现数字,开始往num[nc]放值,
num[nc]=num[nc]*10+c;//每次扩大十倍再加上一个个位数
{//现在的字母不是数字
if(flag==1)//如果刚才是数字,那么说明一段连续的数字结束了,即已经取得一个整数
nc++;//下标后移
//在否则,就只是一般字符了,不需要处理
flag=0;//标记为非数字
i++;///////////////////不要忘记 }//最终回得到nc个整数, if((*(pstr+i-1)) &='0' && (*(pstr+i-1))&='9')
nc++;//注意,如果字符串的最后是数字,然后是'\0'; //那么上面的nc++执行不了(因为while()),所以这里补上
printf(&The string has %d numbers.\nThey are:\n&,nc); pn= for(i=0;i&i++)
printf(&%d
&,*(pn+i)); printf(&\n&);}
其他5条回答
为您推荐:
其他类似问题
您可能关注的内容
c语言的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。11:59 提问
求问读过TCPL的大神,关于C语言switch语句问题
The C Programming Language书中3.4 Switch 开头这么写到:
3.4 Switch
The switch statement is a multi-way decision that tests whether an expression matches one of a number of constant integer values, and branches accordingly.
switch (expression) {
case const-expr: statements
case const-expr: statements
default: statements
_Each case is labeled by one or more integer-valued constants or constant expressions. _If a case matches the expression value, execution starts at that case. All case expressions must be different. The case labeled default is executed if none of the other cases are satisfied. A if it isn't there and if none of the cases match, no action at all takes place. Cases and the default clause can occur in any order.
我不明白,就粗斜体部分,每一个标签应该只是一个整型常量值或者整型表达式。书上为什么写 one or more,意思是每个case标签也可以是多个整型常量值或整型表达式???
按赞数排序
你英文不好,注意是labeled,也就是每个常量用标签标记的,所谓标签,就是一个带有冒号的标注。
可以多个case后面放一个表达式。。。
当然可以,如果多个条件都是用同一个规则,那么你就可以把他们放在一起
statements
你英文不好,注意是labeled,也就是每个常量用标签标记的,所谓标签,就是一个带有冒号的标注。
switch(expression)
const-expr:
const-expr:
const-expr:
const-expr:
if there is no "break", means more than one "const-expr" will be exec.
switch(expression)
case const-expr:
case const-expr:
case const-expr:
case const-expr:
if there is no "break", means more than one "const-expr" will be exec.
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐c语言小问题 如何输入月份(用英文),输出天数 用switch语句 请求大神帮忙 谢谢!!!!!!!!!!!_百度知道
c语言小问题 如何输入月份(用英文),输出天数 用switch语句 请求大神帮忙 谢谢!!!!!!!!!!!
我有更好的答案
31天&);case 6 : printf(&30天&);switch(m){case 1: printf(&31天&
case 12:printf(&输入错误&); }
case 7 : printf(&31天&31天&);
);case 5 ,&m););
case 8 : printf(&31天&quot: printf(&break: printf(&
case 2 : printf(&28天&
case 9: printf(&30天&case 10 : printf(&31天&quot#include&stdio.h&): printf(&case 3 ;31天&);case 4 : printf(&30天&);););
case 11: printf(&30天&int main(){scanf(&%d&;););
}英文实在背不过。
采纳率:35%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。共有 1586 人关注过本帖
标题:switch case的用法总是不懂,可以帮我看看case部分有哪里错了吗?
等 级:新手上路
帖 子:69
结帖率:70%
&&已结贴√
&&问题点数:11&&回复次数:8&&&
switch case的用法总是不懂,可以帮我看看case部分有哪里错了吗?
#include&stdio.h&
int main()
&&& float x,y;
&&& scanf(&%f&,&x);
&&& switch(x)
&&& case x&=1000:y=0;
&&& case x&=2000:y=x*0.05;
&&& case x&=3000:y=x*0.1;
&&& case x&=6000:y=x*0.15;
&&& case x&6000:y=x*0.2;
printf(&tax=%.2f,money=%.2f&,x,y);
以下是错误提示
C:\Users\dell\Desktop\c语言\绝对值\switch case1.c||In function 'main':|
C:\Users\dell\Desktop\c语言\绝对值\switch case1.c|6|error: switch quantity not an integer|
C:\Users\dell\Desktop\c语言\绝对值\switch case1.c|8|error: case label does not reduce to an integer constant|
C:\Users\dell\Desktop\c语言\绝对值\switch case1.c|9|error: case label does not reduce to an integer constant|
C:\Users\dell\Desktop\c语言\绝对值\switch case1.c|10|error: case label does not reduce to an integer constant|
C:\Users\dell\Desktop\c语言\绝对值\switch case1.c|11|error: case label does not reduce to an integer constant|
C:\Users\dell\Desktop\c语言\绝对值\switch case1.c|12|error: case label does not reduce to an integer constant|
||=== Build failed: 6 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
搜索更多相关主题的帖子:
&&&&&&&&&&
等 级:论坛游民
帖 子:14
专家分:31
回复 楼主 北国123456
//case后面只能跟整型数据
#include&stdio.h&
int main()
&&& double x,y;
&&& scanf(&%lf&,&x);
&&& m=(int)(x/1001);
&&& switch(m)
&&& case 0:y=0;
&&& case 1:y=x*0.05;
&&& case 2:y=x*0.1;
&&& case 6:y=x*0.15;
&&& default:y=x*0.2;
printf(&tax=%1.2f,money=%1.2f&,x,y);
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
回复 2楼 feitianshu
不单单只有整型。你试试字符
来 自:桃花岛
等 级:贵宾
威 望:28
帖 子:1204
专家分:4924
以下是引用feitianshu在 18:35:32的发言:
//case后面只能跟整型数据
case后面的常量标号,其类型应与表达式的数据类型相同。
不忘初心, 方得始终; 初心易得, 始终难守!
等 级:新手上路
帖 子:69
回复 2楼 feitianshu
[此贴子已经被作者于 21:28编辑过]
等 级:新手上路
帖 子:69
回复 3楼 linlulu001
嗯,是可以的
等 级:新手上路
帖 子:69
回复 2楼 feitianshu
这样子的话是漏了情况的
等 级:蜘蛛侠
帖 子:236
专家分:1102
回复 7楼 北国123456
针对你这道题 ,就用整形啊,你输入的本来就是一个数,用不到字符,需要看情况使用
等 级:侠之大者
帖 子:182
专家分:430
case后面不能跟判断式啊。。。
&&& case 1:
&&&&&&&&...;
&&& case 2:
&&&&&&&&...;
&&& default:
版权所有,并保留所有权利。
Powered by , Processed in 0.064414 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights ReservedC语言switch语句 大神看看哪里出了问题 为什么我求出来的利息与本金的合计为负数啊 急!!!_百度知道
C语言switch语句 大神看看哪里出了问题 为什么我求出来的利息与本金的合计为负数啊 急!!!
我有更好的答案
s当然就为乱码了。s应在switch语句前赋值,否则因为year数值太小,精度会非常低。或者写为:s=(long)b*(1,算出结果很不准.0+年利率×year))其实更好的办法应该设b和s为double型小错误!你漏了给s赋值了,如下:s=(long)b*(1+((float)year*年利率))注意b和year都为整型,在×利率前必须转化为浮点数型
运行了 ੧๑•́ ʚ •̀๑༄谢谢你
软件工程师、工学学士
.s根本就是随机数..,s没算啊,先算好s=a*b*c
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 c语言switch 的文章

 

随机推荐