【发布时间】:2014-12-01 23:17:42
【问题描述】:
我有一个程序,它接受一个字符数组并调用函数转换。该函数确定字符是字母还是数字。该程序应该输出它在字符串中找到的第一个字母。以及它在字符串中找到的第一个数字。我的循环在发现一个字母不起作用后停止寻找字母。
有什么想法吗? 代码是使用 Borland 编译器用 C 语言编写的。
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
int convert (char array[],char **);
int main()
{
int intval;
char array[512], *charptr;
printf("Input a string that starts with a series of decimal digits:\n>");
while ( gets( array ) != NULL ){
intval = convert(array, &charptr );
printf ("Intval contains %d, Charptr contains '%s'\n", intval, charptr);
}
system("pause");
return 0;
}
int convert (char array[],char ** charptr)
{
int i, x, c = 0;
char b[512];
for (i=0;i<strlen(array);i++){
if (isalpha(array[i]))
{
if(c >= 1){
*charptr = &array[i];
c++;
}
else
break;
}
else if ( isdigit(array[i]))
x = 10*x + array[i] - '0';
}
return x;
}
更新:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
int convert (char array[],char ** charptr);
int main()
{
int intval;
char array[512], *charptr;
printf("Input a string that starts with a series of decimal digits:\n>");
while ( gets( array ) != NULL ){
intval = convert(array, &charptr );
printf ("Intval contains %d, Charptr contains '%s'\n", intval, charptr);
}
system("pause");
return 0;
}
int convert (char array[],char ** charptr)
{
int i, x, c;
char b[512];
for (i=0;array[i] != 0;i++){
if ( isdigit(array[i]))
x = 10*x + array[i] - '0';
else if (isalpha(array[i]))
{
c++;
if(c >= 1){
*charptr = &array[i];
}
}
}
return x;
}
【问题讨论】:
-
您是否使用调试器单步执行了代码?
-
提示:
if(c >= 1){绝不是真的。 -
1. charptr 应该在使用前分配 2. 这很糟糕: for (i=0;i
-
您可以使用
scanf()更有效地编写此代码。永远不要使用gets()。
标签: c string loops if-statement for-loop