我想扫描一个至少需要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
答案 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];