基本要求:Powered by bbs.fishc.com
A. 将用户输入的字符串中代表数字的字符转换为整型数值4O]0QM
B. 打印转换结果来自:bbs.fishc.com
C. 只打印第一组数字来自:bbs.fishc.com
提示:你可以使用 break 语句在适当的时候跳出循环。
#include<stdlib.h>
int main()
{
char a[100];
int i,b;
printf("请输入一行英文字母:");
scanf("%s",a);
for(i=0;i<100;i++)
{
if(!(a[i]>='0'&&a[i]<='9')&&(a[i]!=' '))
{a[i]=' ';//将不是数字或者空格的字符换成空格。
printf("a[%d]=%c %d\n",i,&a[i],i);}
else
break; //第一次遇见数字或空格时跳出循环,计算整型数。
}
b=atoi(a);
printf("整数是%d i=%d",b,i);//putchar(b);这样不行,
return 0;
}
//问题,输入a空格123.45时,结果为0?
修改如下,供参考:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char a[100];
int i, b = 0, flg;
printf("请输入一行英文字母:");
scanf("%[^\n]", a);//scanf("%s", a);
for (i = 0, flg = 1; a[i] != '\0'; i++) //for (i = 0; i < 100; i++)
{
if (a[i] >= '0' && a[i] <= '9' && flg) //if(!(a[i]>='0'&&a[i]<='9')&&(a[i]!=' '))
{
flg = 0;
b = atoi(a + i);
printf("整数是%d i=%d\n", b, i);
//break; //加上这句,实现只打印第一组数字,若不加,则可以打印后续的任意组数据
}
else if ((a[i] < '0' || a[i] > '9') && !flg)
flg = 1;
}
return 0;
}
自己想了一晚上,大概明白了
一个是scanf("%s",a),输入不接受空格,会把空格后面的内容忽略,改为scanf(" %[^\n]",a),又正常一点,但是还不是很正常。
再一个是可能是,判断条件还是不够严谨。。。。。
因为输入 ahss hsjshsj jdkj,.;'[] sdjhgj 2456354 的话,只有第一串ahss被替换,因为else break;(第一次遇见空格就跳出循环)了,就没有对后面进行替换。
正确应该是第一次遇见数字就跳出循环,这样才对折腾一个晚上,现在慢慢明白了