有两个c程序 程序一正确的 程序二错误 不知道为什么

来源:百度知道 编辑:UC知道 时间:2024/05/08 14:27:52
程序一

#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<stdlib.h>
main()
{
char s[100],temp[20];int i=0,j=0,tem[100];
static x=0;
printf("请输入一个文本:");
gets (s);
do{
if(isdigit(s[i])||s[i]=='-')
{
temp[j++]=s[i];
}
else{temp[j]='\0';
if(strlen(temp)>0)
{
tem[x++]=atoi(temp);
j=0;

}
}

}while(s[i++]);
printf("一共有%d个数据。\n",x);
}

程序二

#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<stdlib.h>
main()
{
char s[100],temp[20];int i=0,j=0,tem[100];
static x=0;
printf("请输入一个文本:");
gets (s);
do{
if(isdigit(s[i])||s[i]=='-')
{
temp[j++]=s[i];

**********************
第一次补充
**********************
static x = 0;
在这里没有必要用static,不用效果也一样,
改写成: int x=0;
自己可以试一试

**********************
第一次回复
**********************
1。程序二有几个问题:
(1)你的循环条件首先是错误的,他肯定不会循环,因为当i=0时条件(i++)肯定为假,所以一次就退出了
(2)字符串结束检测。你不能抑制检测到s[99],也就是不能用i<100,因为绝大多数情况下,你并没有输入100个字符

2。在原程序中,tem中存入的是555,这是由atoi决定的,它由前向后扫描
3。"---3" 对于函数atoi来说是一个非数值数据,他会把它转换成0

第一个程序实际上是有问题的
if(isdigit(s[i])||s[i]=='-') //未考虑'-'前后的字符
// 所以造成了你上面的两个问题

正确的程序如下:
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<stdlib.h>
main()
{
 char s[100],temp[20];
 int i=0,j=0,tem[100];
 int flag=0;
 static x=0;
 printf("请输入一个文本:");
 gets (s);
 while(s[i]){
  if(isdigit(s[i])){