为什么C程序使用Scanf提供奇怪的输出?
我目前正在学习C编程,我遇到了这种奇怪的输出为什么C程序使用Scanf提供奇怪的输出?,c,printf,scanf,C,Printf,Scanf,我目前正在学习C编程,我遇到了这种奇怪的输出 // Program will try functionalities of the scanf function #include<stdio.h> #include<stdlib.h> int main(int argc, char const *argv[]) { char array[40]; scanf("Enter your address: %39s",array); /
// Program will try functionalities of the scanf function
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char const *argv[])
{
char array[40];
scanf("Enter your address: %39s",array); //39 + 1/o null character at the end of the character array.
printf("The address is : %s", array);
return 0;
}
那个黑色的积木是什么?谁能解释一下!
谢谢。有两个问题:
- 您没有正确初始化
。应该是:数组
char数组[40]=“”代码>
- 您将scanf和printf与以下语句混淆:
scanf(“输入您的地址:%39s”,数组)代码> 它应分为:
printf(“输入您的地址:”)代码>
scanf(“%39s”,数组)代码>
scanf()
函数正确使用格式说明符,并使用printf()
显示自定义消息即可
请查看以下代码:
// Program will try functionalities of the scanf function
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char const *argv[])
{
char array[40];
printf("Enter your address: ");
scanf("%39s",array); //39 + 1/o null character at the end of the character array.
printf("The address is : %s", array);
return 0;
}
//程序将尝试scanf函数的功能
#包括
#包括
int main(int argc,char const*argv[]
{
字符数组[40];
printf(“输入您的地址:”);
scanf(“%39s”,数组);//39+1/o字符数组末尾的空字符。
printf(“地址是:%s”,数组);
返回0;
}
您应该再次查看scanf的文档。
格式字符串应包含格式规范和按字面匹配的非格式字符。
您似乎假设可以使用scanf()
进行提示,这是不正确的
使用此(未经测试的)代码可能会更成功:
检查scanf()
调用的结果以查看是否读取了预期数量的值也是一种很好的做法。在您的例子中,值可能是0,因为输入中的文字字符不匹配。未使用格式规范时,目标变量的值不变(在这种情况下未定义,因为数组包含恰好位于分配变量的堆栈上的字节。)来自以下手册页:
int-scanf(常量字符*格式,…)代码>
未定义输出的原因:
格式的每个转换规范都以
字符“%”或字符序列“%n$”
解决方案:更改scanf(“输入您的地址:%39s”,数组)代码>到scanf(“%39s”,数组)
array
表示基址,因此使用%u
或%p
作为printf(“%u”,数组)代码>使用scanf
是错误的,因为scanf(“%s”,数组)
@csavvy By address,我的意思是输出我在character变量中输入的字符串并输出相同的字符串。不是变量的地址。另外,对于阵列AFAIK,我们可以使用scanf(%s,array)初始化怎么不重要?在将输入写入数组后,是否将scanf()
附加一个NUL
终止符本身?嘿,使用代码后,我只能输出第一组字符。比如:输入你的地址:Qwerty ash asjdhjas hdkajs地址是:Qwerty
它只是输出第一个单词,而不是整个单词thing@technextgenscanf
将在第一行换行时停止(按Enter键)@Jabberwocky我正在输入一行空格。scanf不识别空格吗?@technextgen是的,它识别。这发生在这里:您的输入Foo-Bar
<代码>扫描频率(“%39s”,数组)
将读取Foo
,printf(…
将打印Foo
,然后您的程序结束,没有人会读取Bar
。再次,请查看scanf的手册页(我必须承认我自己没有仔细查看)。%s
格式读取一个字符串直到下一个空格;如果要读取到行尾,可以使用fgets()
或%[^\n]
格式。
// Program will try functionalities of the scanf function
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char const *argv[])
{
char array[40];
printf("Enter your address: ");
scanf("%39s",array); //39 + 1/o null character at the end of the character array.
printf("The address is : %s", array);
return 0;
}
int main(int argc, char const *argv[])
{
char array[40];
printf("Enter your address: ");
scanf("%39s",array); //39 + 1/o null character at the end of the character array.
printf("The address is : %s\n", array);
return 0;
}