我必须编写一个程序,将用户输入(字符串)转换为Integer。如果用户输入确实是一个数字,它应该同时检查。 还有一种方法。
并允许没有图书馆功能。
我无法想出怎么做。我在开始时得到的只是这种可悲的结构
#include <stdio.h>
void main()
{
char input[100];
int i;
int sum = 0;
printf("Type a String which will be converted to an Integer: ");
scanf("%c, &input");
for (i = 0; i < 100; i++)
{
}
}
我感谢任何帮助,谢谢
答案 0 :(得分:3)
转换很容易......
但是如果你不能使用库函数,
argv
; 所以,没有太多的麻烦:
int main( int argc, char * argv[] )
{
int rc = 0;
if ( argc == 2 ) // one, and only one parameter given
{
unsigned i = 0;
// C guarantees that '0'-'9' have consecutive values
while ( argv[1][i] >= '0' && argv[1][i] <= '9' )
{
rc *= 10;
rc += argv[1][i] - '0';
++i;
}
}
return rc;
}
我没有实现'+'
或'-'
的检查,也没有找到一种方法来表示“输入不是数字”。我也只是停止解析第一个非数字。所有这一切都可以改进,但这应该让你知道如何解决“无库函数”限制。
(因为这听起来像是一个家庭作业,你应该必须写一些你自己的代码。我已经给了你三个大勺子帮助{{1} },argv
和转化本身。)
请致电:
'0'-'9'
(例如<program name> <value>
)
检查返回代码(对于Linux shell):
./myprogram 28
在Windows上,这是关于echo $?
或某些事情......或许有用的Windows用户会对此发表评论。
“echo %ERRORLEVEL%
连续”声明的来源:ISO / IEC 9899:1999 5.2.1字符集,第3段:
在源基本字符集和执行基本字符集中,上述小数位数列表中
'0'-'9'
之后的每个字符的值应大于前一个值的值。
我确信这是在C11中保留的,但我只提供较旧的C99纸张。
答案 1 :(得分:2)
取高位数并将其添加到数字,将数字乘以10并添加下一个数字。等等:
#include <stdio.h> // scanf, printf
void main()
{
char input[100];
printf("Type a String which will be converted to an Integer: ");
scanf("%s", input);
int number = 0;
int neg = input[0] == '-';
int i = neg ? 1 : 0;
while ( input[i] >= '0' && input[i] <= '9' )
{
number *= 10; // multiply number by 10
number += input[i] - '0'; // convet ASCII '0'..'9' to digit 0..9 and add it to number
i ++; // step one digit forward
}
if ( neg )
number *= -1;
printf( "string %s -> number %d", input, number );
}
input[i] - '0'
有效,因为ASCII字符&#39; 0&#39; ...&#39; 9&#39;具有从48到57的升序ASCII码。
答案 2 :(得分:0)
很多错过的东西。首先接受一个字符串是由scanf("%s",input);
完成的。通过接收它的方式,它只存储一个字符,然后运行循环直到收到字符串的长度。检查以下代码。
#include <stdio.h>
#include<string.h>
void main()
{
char input[100];
int i;
int sum = 0;
printf("Type a String which will be converted to an Integer: ");
scanf("%s", input);
for (i = 0; i < strlen(input); i++)
{
if(input[i]>=48 && input[i]<=57)
{
//do something, it is a digit
printf("%d",input[i]-48);
//48 is ascii value of 0
}
}
答案 3 :(得分:0)
所以基本上你想知道标准库atoi
之类的东西是如何工作的。为此,您需要考虑字符串如何表示数字。
基本上,字符串(表示数字)是从0到9的数字列表。字符串abcd(其中a,b,c,d是任何数字的占位符)表示数字a * 10 ^ 3 + b * 10 ^ 2 + c * 10 + d(此处考虑基数10,类似于其他碱基)。所以基本上你需要如上所示分解字符串并执行所需的arhitmetic操作:
// s - the string to convert
int result = 0;
for (int index = 0; index < strlen(s); index++) {
result = result * 10 + s[index] - '0';
}
操作s[index] - '0'
将表示数字的字符转换为其值。
答案 4 :(得分:0)
// the function returns true for success , and false for failure
// the result is stored in result parameter
// nb: overflow not handled
int charToInt(char *buff,int *result){
*result=0;
char c;
while(c=*buff++){
if((c < '0') || (c >'9')) // accept only digits;
return 0;
*result *= 10;
*result += c-'0';
}
return 1;
}
答案 5 :(得分:-1)
试一试:
$("#slider-customer-type").on("change", function() {
if($("#slider-customer-type").val()==0) {
$("#partial-customertype-business").removeClass("show");
$("#partial-customertype-business").addClass("hide");
$("#partial-customertype-personal").addClass("show");
} else {
$("#partial-customertype-personal").removeClass("show");
$("#partial-customertype-personal").addClass("hide");
$("#partial-customertype-business").addClass("show");
}
$("#myform :input").prop("value", '');
});
答案 6 :(得分:-1)
如果您希望您的代码可以移植到不使用ASCII的系统,那么您必须循环遍历char
数组,并将源中的每个字符与每个可能的数字进行比较性格,如:
int digit;
switch(arr[i]) {
case '0':
digit=0; break;
case '1':
digit=1; break;
// etc
default:
// error handling
}
然后,将数字添加到结果变量中(在将其乘以10之后)。
如果您可以采用ASCII,则可以用以下方法替换整个switch语句:
if(isdigit(arr[i])) {
digit=arr[i] - '0';
} else {
// error handling
}
这是有效的,因为在ASCII表中,所有数字都在一个范围内,按升序排列。通过减去零字符的序数值,可以得到该数字的值。通过添加isdigit()
宏,您还可以确保只以这种方式转换数字字符。