C++ scanf()不';我不接受空白
我需要一个scanf()调用来接受空格(没有制表符或换行符,只有C++ scanf()不';我不接受空白,c++,c,scanf,C++,C,Scanf,我需要一个scanf()调用来接受空格(没有制表符或换行符,只有'空格符号) 我从这个问题的答案中得到了这个格式说明符: 虽然它可以很好地接受第一个输入序列,但它在第一个空白字符所在的位置终止,并使用空字符。发生什么事?我是否使用了错误的格式 我应该说,我在这里使用scanf()是因为安全不是一个问题;我是唯一一个使用这个特殊程序的人,输入的格式是严格的 使用scanf(“%[^\n]”,缓冲区)。它将接受空白 示例程序- int main() { char buffer[2048];
'
空格符号)
我从这个问题的答案中得到了这个格式说明符:
虽然它可以很好地接受第一个输入序列,但它在第一个空白字符所在的位置终止,并使用空字符。发生什么事?我是否使用了错误的格式
我应该说,我在这里使用scanf()是因为安全不是一个问题;我是唯一一个使用这个特殊程序的人,输入的格式是严格的 使用scanf(“%[^\n]”,缓冲区)代码>。它将接受空白
示例程序-
int main()
{
char buffer[2048];
printf("Enter the string\n");
scanf("%[^\n]",buffer);
printf("%s\n", buffer);
return 0;
}
输出-
root@sathish1:~/My Docs/Programs# ./a.out
Enter the string
abc def ghi ijk
abc def ghi ijk
root@sathish1:~/My Docs/Programs#
Scanf不适合处理您希望有特定数量的空白的格式。从scanf
手册页:
格式字符串中的空白(如空格、制表符或换行符)与输入中的任何空白匹配,包括无空白
以及:
[
匹配指定字符集中的非空字符序列
接受的字符;下一个指针必须是指向char的指针,并且
必须有足够的空间容纳字符串中的所有字符,以及
终止NUL字符。通常前导空格的跳过被抑制。
这意味着你可以做类似的事情
scanf("%[^\n]",buffer);
上面写着:“除了字符串末尾的新行外,阅读所有内容”
或者,如果要跳过第一个空格,可以执行以下操作:
scanf("%*[ ]%[^\n]",buffer);
这表示“读取但忽略空格字符,然后将所有其他内容读取到缓冲区中”当您可以使用scanf
时,如果您正在读取文本行,则首选getline
,并提供动态内存分配的优势(当line=NULL时).getline
会读取/保存newline
字符,因此如果不需要,可以很容易地将其剥离。以下示例说明了这一点:
#include <stdio.h>
int main (void) {
char *line = NULL;
ssize_t read = 0;
size_t n = 0;
printf ("\nEnter a line of text: ");
read = getline (&line, &n, stdin);
line [read - 1] = 0; /* strip newline from string (optional) */
read--;
printf ("\n read '%zd' characters: '%s'\n\n", read, line);
return 0;
}
fgets(string,sizeof(string),stdin)
将接受或scanf(“%[\n]s”,string);
将接受如果这类似于scanf(“%^[\n]s”,buffer);需要在之前添加&
buffer@SujithKarivelil-缓冲区已经是指针(来自数组脚本),所以它是确定的缓冲区不是指针-它是数组引用,这是。但是,当以这种方式使用数组引用时,它是正确的,因此不包括&
。
#include <stdio.h>
int main (void) {
char *line = NULL;
ssize_t read = 0;
size_t n = 0;
printf ("\nEnter a line of text: ");
read = getline (&line, &n, stdin);
line [read - 1] = 0; /* strip newline from string (optional) */
read--;
printf ("\n read '%zd' characters: '%s'\n\n", read, line);
return 0;
}
./bin/getln
Enter a line of text: this is a line of text with white .. .. space.
read '52' characters: 'this is a line of text with white .. .. space.'