为什么C程序使用Scanf提供奇怪的输出?

为什么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); /

我目前正在学习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);   //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@technextgen
scanf
将在第一行换行时停止(按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;
}