函数将字符串转换为int - C.

时间:2015-08-28 13:33:59

标签: c string char int

我想扫描一个至少需要200个字符的字符串,然后我想字符串转换为mySvg2,以便我可以打印出来,例如container.RegisterType<IDataRepository, DataRepository>("Online"); container.RegisterType<IDataRepository, OfflineDataRepository>("Offline"); container.RegisterType<IDataRepository>(new InjectionFactory(c => { var connectivityStatus = /*TODO: logic to determine if online*/ ? "Online" : "Offline"; return c.Resolve<IDataRepository>(connectivityStatus); });

我怎么能写一个这样的功能,我在这里写的 (这个不起作用!):

int

5 个答案:

答案 0 :(得分:0)

scanf("%s", car);

您需要读取字符串%s而不是单个字符%c。当作为参数传递时,char数组也会衰减为指针,所以你不应该使用&amp; char。

答案 1 :(得分:0)

第一

scanf("%c", &car);

来自man scanf

  

Ç
  匹配一系列字符,其长度由最大字段宽度指定(默认值1 );下一个指针   必须是指向char的指针,并且必须足够                 所有字符的空间(没有添加终止空字节)。通常跳过前导空格被抑制。至   首先跳过空白区域,使用显式空格                 格式。

所以你只读一个字符,而不是整个字符串。

然后,您依赖于添加的终止空字节,这不会发生。请改用%199s,为终止空字节留出足够的空间。

然后,考虑到这个世界上没有int应该有足够的空间容纳199个十进制数字的数字,你应该考虑你的200个字符缓冲区。

答案 2 :(得分:0)

如果您的目标不是为了教育目的而编写这样的功能,而是因为您需要一个功能:

int number;
scanf("%d", &number); 

完全相同:从输入中读取一个数字,并将其放在number

答案 3 :(得分:0)

这是解决方案,从字符串的结尾开始,因为单位位置是从右到左,然后将单位放置到十位,然后是100,依此类推。

code first

答案 4 :(得分:-2)

关闭。建议的更改如下。

使用char car[200+1]至&#34;至少需要200个字符&#34;。

使用"%200s"而不是"%c"来读取字符串而不是char并限制其输入。

//int main()
int main(void) {
  // char car[200];
  char car[200+1];
  int number;
  int i,x;
  int sum = 0;

  printf("Write in number: \n");
  // scanf("%c", &car);
  scanf("%200s", car);

  // for (i=0; i<200; i++) {
  for (i=0; car[i]; i++) {
    // if (car[i] != '\0'){
    x = car[i]-'0';
    // sum = sum + x;
    sum = 10*sum + x;
    // if (i != 0) { sum = sum*10; }
  }
  printf("%d\n", sum)
  return 0;
}

除非输入类似于&#34; 000000000000000000000000000123&#34;,200位数肯定会溢出sum

检测

    x = car[i]-'0';
    if (sum >= INT_MAX/10 && (sum > INT_MAX/10 || x > INT_MAX%10)) {
      x = INT_MAX;
      // maybe set an error flag
      break; 
    }
    sum = 10*sum + x;

int的最大值INT_MAX来自#include < limits.h>至少 32767.某些平台使用16位,32位或64位int其他范围是可能的。让我们假设一个128位的最坏情况。那将需要大约39个十进制数字。为标志留出空间并终止空字符,建议

char car[39+1+1];