作为练习,我可以采用两个整数或两个字符串。如果我想要整数作为输入,我需要将它们转换为字符串,或者如果我将字符串作为输入,我需要将字符串转换为整数。 当我想一次输入两个字符串时,不知何故,它们被连接起来。 如果我采用整数,当我想使用 snprintf 进行转换时,字符串会再次连接!
当我将字符串作为输入时:
#include <stdio.h>
int main(){
char n[5],m[5];
scanf("%s %s",n,m);
printf("%s %s\n",n,m);
}
输入12345 56789
但输出是 1234556789 12346
扫描仪认为“12345 56789”是一个完整的字符串。
这是怎么发生的?我不是指定n只能容纳5个字符吗? 如果我将 n[5] 减少到 n[1] 输出为 156789 56789
当我将整数作为输入并尝试使用 snprintf 进行转换时:
#include <stdio.h>
#include <stdlib.h>
int main(){
int g,w,cnt=0;
scanf("%d %d",&g,&w);
char n[5], m[5];
snprintf(n,6,"%d",g);
snprintf(m,6,"%d",w);
printf("%s\n",n);
printf("%s\n",m);
}
如果我输入12345 67894 输出为 1234567894 67894。
和以前一样的问题。 我可以做什么来解决这个问题?
在 C 中定义用于存储字符串的 char 数组时,必须考虑 scanf 隐式放入数组中的字符串结尾字符 ( )。 因此,如果定义 char[5],您将能够存储由 4 个字符组成的字符串,因为数组的最后一个位置用于 .
尝试以这种方式更改您的代码:
#include <stdio.h>
int main(){
char n[6],m[6];
scanf("%s %s",n,m);
printf("%s %s\n",n,m);
}