int main()
{
//Define Variables
char studentName;
//Print instructions to fill the data in the screen
printf("Please type in the Students name:\n");
scanf("%s", &studentName);
printf("\n\n%s", &studentName);
return 0;
}
看到上面的代码,当我输入一个句子时,我只是打印出第一个单词。
我知道这是一个基本的事情,但我只是从简单的C开始。
答案 0 :(得分:4)
阅读scanf(3)文档。对于%s
来说是
s Matches a sequence of non-white-space characters; the next
pointer must be a pointer to character array that is long
enough to hold the input sequence and the terminating null
byte ('\0'), which is added automatically. The input string
stops at white space or at the maximum field width, whichever
occurs first.
所以你的代码错了,因为它应该有studentName
的数组,即
char studentName[32];
scanf("%s", studentName);
由于可能buffer overflow而仍然很危险(例如,如果您键入32个或更多字母的名称)。使用%32s
代替%s
可能会更安全。
还要养成使用所有警告和调试信息进行编译的习惯(即如果GCC使用gcc -Wall -g
)。有些编译器可能会警告过你。学习使用调试器(例如gdb
)。
此外,请习惯结束 - 不使用printf
开始您的\n
格式字符串(或者调用fflush
,请参阅fflush(3))。
了解undefined behavior。你的程序有一些!它错过了#include <stdio.h>
指令(作为第一个非注释重要行)。
答案 1 :(得分:4)
您的代码有三个问题:
scanf
来读取带空格的字符串; %s
停在第一个空格或行尾字符处。解决此问题的一种方法是使用fgets
,如下所示:
char studentName[100];
//Print instructions to fill the data in the screen
printf("Please type in the Students name:\n");
fgets(studentName, 100, stdin);
printf("\n\n%s", &studentName);
return 0;
答案 2 :(得分:1)
尝试 scanf(“%[^ \ n]”,&amp; studentName); 而不是 scanf(“%s”,&amp; studentName);
答案 3 :(得分:1)
这种情况正在发生,因为%s会在遇到空格时立即停止读取输入。
为了避免这种情况,你可以做的是声明一个字符串所需长度的数组。
然后使用此命令输入字符串: -
scanf("%[^\n]s",arr);
这样scanf将继续读取字符,除非遇到'\ n',换句话说你按下键盘上的回车键。这会给出一个新的线路信号并且输入停止。
int main()
{
//Define Variables
char studentName[50];
//Print instructions to fill the data in the screen
printf("Please type in the Students name:\n");
scanf("%[^\n]s", &studentName);
printf("\n\n%s", &studentName);
return 0;
}
或者您也可以使用gets()和puts()方法。如果您正在为非常基本的问题编写代码,这将真正简化您的工作。
[编辑]:正如dasblinkenlight所指出的......我也不建议你使用gets函数,因为它已被弃用。
int main()
{
//Define Variables
char studentName[50];
//Print instructions to fill the data in the screen
printf("Please type in the Students name:\n");
gets(studentName); printf("\n\n");
puts(studentName);
return 0;
}
答案 4 :(得分:0)
你的问题在这里
char studentName;
它是 char ,而不是字符串。
尝试:
char studenName[SIZE];
等字符数组。malloc
动态分配内存:
char buffer[MAX_SIZE];
scanf("%s", &buffer);
char * studentName = malloc (sizeof(buffer) + 1);
strcpy (studentName , buffer);
答案 5 :(得分:0)
进行以下更改并尝试使用。我在studentName定义之后添加了[80],告诉编译器studentName是一个包含80个字符的数组(否则编译器会把它当作一个char)。此外,&amp; studentName之前的符号不是必需的,因为数组的名称隐含了一个指针。
int main()
{
//Define Variables
char studentName[80];
//Print instructions to fill the data in the screen
printf("Please type in the Students name:\n");
scanf("%s", studentName);
printf("\n\n%s", studentName);
return 0;
}