使用 Scanf() 获取字符串和整数的输入
Using Scanf() for taking input for both string and integer
我正在编写一个简单的 C 程序来使用 scanf()
从用户那里获取不同变量的输入,如下所示:
#include <stdio.h>
int main(){
int a, b;
scanf("%d %d", &a, &b);
printf("%d\n",a);
printf("%d\n",b);
return 0;
}
正如预期的那样,此输出完全正常:
input: 10 23
output: 10
23
但是后来我也尝试了一个字符串数组的输入,如下(这里char c[2]
是一个字符串数组):
#include <stdio.h>
int main(){
int a, b;
char c[2];
scanf("%d %d %s", &a, &b, c);
printf("%d\n",a);
printf("%d\n",b);
printf("%s\n",c);
return 0;
}
现在输出出乎意料:
input: 10 23 AM
output: 10
0
AM
在这里,可以看出为变量 b
打印的值将变为 0
,而不是预期的 23
。获取字符串数组的输入如何更改变量 b
的值?
谁能帮忙弄清楚,我做错了什么(当然是愚蠢的错误)?强调文字
您的 char c[2];
变量数组不够大,无法容纳 2 个字符的字符串 加上所需的 nul
-终止符 。如果您知道输入不会超过2个字符,那么更改为char c[3];
应该就足够了;但是,为了增加安全性,您可以限制 scanf
调用将读取的字符数,使用 %2s
之类的格式说明符(或者更一般地,对于数组 char buff[n];
在该格式说明符中使用 n - 1
的值。
就目前而言,您有 未定义的行为 – 这可能包括覆盖b
的值(零应该是 nul
终止符)。
我正在编写一个简单的 C 程序来使用 scanf()
从用户那里获取不同变量的输入,如下所示:
#include <stdio.h>
int main(){
int a, b;
scanf("%d %d", &a, &b);
printf("%d\n",a);
printf("%d\n",b);
return 0;
}
正如预期的那样,此输出完全正常:
input: 10 23
output: 10
23
但是后来我也尝试了一个字符串数组的输入,如下(这里char c[2]
是一个字符串数组):
#include <stdio.h>
int main(){
int a, b;
char c[2];
scanf("%d %d %s", &a, &b, c);
printf("%d\n",a);
printf("%d\n",b);
printf("%s\n",c);
return 0;
}
现在输出出乎意料:
input: 10 23 AM
output: 10
0
AM
在这里,可以看出为变量 b
打印的值将变为 0
,而不是预期的 23
。获取字符串数组的输入如何更改变量 b
的值?
谁能帮忙弄清楚,我做错了什么(当然是愚蠢的错误)?强调文字
您的 char c[2];
变量数组不够大,无法容纳 2 个字符的字符串 加上所需的 nul
-终止符 。如果您知道输入不会超过2个字符,那么更改为char c[3];
应该就足够了;但是,为了增加安全性,您可以限制 scanf
调用将读取的字符数,使用 %2s
之类的格式说明符(或者更一般地,对于数组 char buff[n];
在该格式说明符中使用 n - 1
的值。
就目前而言,您有 未定义的行为 – 这可能包括覆盖b
的值(零应该是 nul
终止符)。