当从文件中读取或输入输入时,将字符串(字符数组)强制转换为int会很好。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define SIZE 500
int main(void)
{
FILE* pfile;
pfile = fopen("/tmp/code","r");
char *stringBuffer = (char *)malloc(SIZE * sizeof(char));
char ch;
int i = 0;
ch = getc(pfile);
while(ch != EOF)
{
stringBuffer[i] = ch;
ch = getc(pfile);
i++;
}
fclose(pfile);
int stringSize = (int)(sizeof(stringBuffer)/sizeof(char));
stringBuffer = (char *)realloc(stringBuffer,(stringSize * sizeof(char)));
printf("the string works: %s \n",stringBuffer);
int multi;
int sum;
for(int x =0; x < stringSize; x++)
{
int intger = ((int)stringBuffer[((stringSize - 1) - x)] - 48);
if( x != 0 )
{
multi = (int)pow(10,x);
sum += ( multi * intger );
}
else
sum += intger;
}
printf("the int works: %i \n",sum);
free(stringBuffer);
return(0);
}
我意识到我可以 1.将char作为int&amp;从ASCII转换为实数 2.multiplier each(now int)by是小数位(由数组位置确定) 3.加在一起 例如(警告这段代码有点难看,我还没有看过两次,到目前为止只是一个测试)
<form name="updateform" method="post" action="updateVehicleModel.php">
<div class="form-group">
<LABEL>Enter Vehicle Model</LABEL>
<input type="hidden" name="modelid" value="<?php if(isset($row['id_vehiclemodel'])) { echo $row['id_vehiclemodel']; } ?>" />
<input type="text" name="model" value="<?php if(isset($row['vehicle_model'])) { echo $row['vehicle_model']; } ?>" required class="form-control col-md-3 col-sm-3" />
</div>
<div class="form-group">
<label>Choose Vehicle Type</label>
<input type="hidden" name="modelid" value="<?php if(isset($row['id_vehiclemodel'])) { echo $row['id_vehiclemodel']; } ?>" />
<select class="form-control" name="fkvehicleType" value="<?php if(isset($row['id_vehicleType'])){echo $row['vehicle_Type'];}?>">
<option value="">Select Vehicle Type</option>
<?php
$res=mysqli_query($link,"Select * from vehicletype where status_vehicleType='1'");
while ($row=mysqli_fetch_array($res)) {
?>
<option value=<?php echo $row['id_vehicleType'];?>><?php echo $row['vehicle_Type'];?></option>
<?php
}
?>
</select>
</div>
<div class="form-group">
<label>Choose Vehicle Brand</label>
<select class="form-control" name="fkvehicleBrand" value="<?php if(isset($row['id_vehicleBrand'])){echo $row['vehicle_Brand'];}?>">
<option value="">Select Vehicle Brand</option>
<?php
$res=mysqli_query($link,"Select * from vehiclebrand where status_vehicleBrand='1'");
while ($row=mysqli_fetch_array($res)) {
?>
<option value=<?php echo $row['id_vehicleBrand'];?>><?php echo $row['vehicle_Brand'];?></option>
<?php
}
?>
</select>
</div>
<div class="form-group">
<label>Choose Status</label>
<select name="statustype" value="<?php if(isset($row['vehicle_model'])) { echo $row['vehicle_model']; } ?>" required class="form-control">
<option value="1">Enabled</option>
<option value="0">Disabled</option>
</select>
</div>
<div class="form-group">
<input type="submit" name="submit" value="Update" class="btn btn-info btn-block" />
</div>
<span class="text-success"><?php if (isset($success)) { echo $success; } ?></span>
<span class="text-danger"><?php if (isset($error)) { echo $error; } ?></span>
</form>
但仍然像int一样转换为字符串会很好(我假设c ++有这个吗?)。
答案 0 :(得分:0)
它无法按照您的预期运作。
==&gt; 如果是
之类的声明 int intger = (int)stringBuffer;
施放&#34;字符串&#34; (或者,指向char
数组的第一个元素的指针)到int
是高度实现定义的行为,如果实现不正确支持,将导致未定义的行为。
==&gt; OTOH,如
之类的声明 int intger = (int)*stringBuffer;
尝试取消引用stringBuffer
指向的第一个内存位置,然后将该值转换为int
(无论如何都会隐式完成)。这不会将整个字符串内容转换为整数类型。这就是为什么你会看到像
如果超过1位小数,则整数不起作用:%[......]
解决方案:从您的问题陈述中,您似乎可以使用strtol()
或变体。您需要使用fgets()
或类似内容读取整行,然后(在解析后,如果需要)将其传递给strtol()
以转换为long int
。
之后,关于您的代码的说明:
while(ch != EOF)
循环体中,您使用i
进行了不受控制的迭代,这可能会导致超出内存访问。 int stringSize = (int)(sizeof(stringBuffer)/sizeof(char));
不会为您提供字符串大小,您需要空终止字符串并使用strlen()
来获取字符串的长度。那说,一些一般性评论:
fopen()
(或者就此而言,任何库函数)的返回值。malloc()
and family in C
.。getc()
返回int
,返回值EOF
不适合char
。您需要int
才能容纳它。答案 1 :(得分:0)
对于您的示例,您可以使用fscanf
函数简化整个代码。
FILE* pfile;
pfile = fopen("/tmp/code","r");
int intger;
fscanf(pfile, "%i", &intger);
fclose(pfile);
如果你需要字符串和整数,你可以用同样的方式使用sscanf
函数,或strtol
函数。