C 如何在不同的行中进行字符串输入?
我想在5行中输入一些字符串。一行可以包含多少单词是没有限制的。但是我想要5行。我怎么做?请帮助我 示例:该程序将类似于以下程序C 如何在不同的行中进行字符串输入?,c,string,input,C,String,Input,我想在5行中输入一些字符串。一行可以包含多少单词是没有限制的。但是我想要5行。我怎么做?请帮助我 示例:该程序将类似于以下程序 How many Line? 5 Enter 5 line: hi i am john i am new to c programming. in have problem in string. i can not take input pleas help me.thanks a lot. 这是我的密码: #include<stdio.h>
How many Line?
5
Enter 5 line:
hi i am john
i am new to c programming.
in have problem in string.
i can not take input
pleas help me.thanks a lot.
这是我的密码:
#include<stdio.h>
int main()
{
int line,i;
char *string;
printf("How many line?\n");
scanf("%d",&line);
for(i=0;i<line;i++)
{
gets(string);
}
printf("You entered:\n");
for(i=0;i<line;i++)
{
puts(string);
}
return 0;
}
#包括
int main()
{
int行,i;
字符*字符串;
printf(“多少行?\n”);
scanf(“%d”行和“&line”);
对于(i=0;i而言,代码中的错误在于为字符串分配了内存以存储用户输入
这里的codechar*string
中有一个指针,指向用户输入中最后输入的字符串。因此,您可以将最后一个字符串作为输出,而不是获取所有字符串
按以下方式更改代码:
#include<stdio.h>
int main()
{
int line,i;
char string[50][80];
printf("How many line?\n");
scanf("%d",&line);
for(i=0;i<line;i++)
{
scanf("%s", string[i]);
}
printf("You entered:\n");
for(i=0;i<line;i++)
{
puts(string[i]);
}
return 0;
}
#包括
int main()
{
int行,i;
字符串[50][80];
printf(“多少行?\n”);
scanf(“%d”行和“&line”);
对于(i=0;i而言,代码中的错误在于为字符串分配了内存以存储用户输入
这里的codechar*string
中有一个指针,指向用户输入中最后输入的字符串。因此,您可以将最后一个字符串作为输出,而不是获取所有字符串
按以下方式更改代码:
#include<stdio.h>
int main()
{
int line,i;
char string[50][80];
printf("How many line?\n");
scanf("%d",&line);
for(i=0;i<line;i++)
{
scanf("%s", string[i]);
}
printf("You entered:\n");
for(i=0;i<line;i++)
{
puts(string[i]);
}
return 0;
}
#包括
int main()
{
int行,i;
字符串[50][80];
printf(“多少行?\n”);
scanf(“%d”行和“&line”);
对于(i=0;i而言,与其静态地指定2D数组,不如指定一个指针数组,然后为添加到数组中的每个字符串分配内存。虽然首选fgets
或getline
,但使用scanf
分配内存没有错。(注意:当前版本的scanf
在分配转换说明符之前使用m
,windows和早期版本使用a
)。当使用scanf
进行分配时,scanf
需要一个char**
类型的指针参数来保存分配的字符串。当分配内存时,无论如何,当不再需要时,您负责释放内存。考虑到这一点,您的代码可以d应写如下:
#include <stdio.h>
#include <stdlib.h>
#define MAXD 64
int main() {
char *string[MAXD];
int line = 0;
int i = 0;
printf ("\nHome many lines: ");
scanf ("%d%*c", &line);
if (line > MAXD) { /* validate line <= MAXD pointers */
fprintf (stderr, "warning: request exceeds %d limit.\n", MAXD);
line = MAXD;
}
/* scanf will allocate if given 'm' ('a' on Win & earlier versions)
as part of the specification before the conversion specifier */
for (i = 0; i < line; i++) {
printf ("\n input: ");
scanf ("%m[^\n]%*c", &string[i]);
}
printf ("\nYou entered:\n\n");
for (i = 0; i < line; i++)
printf (" string[%d] : %s\n", i, string[i]);
printf ("\n");
/* free the memory allocated by scanf */
for (i = 0; i < line; i++)
free (string[i]);
return 0;
}
您可以通过调整MAXD
define来调整指针的数量。(您也可以根据需要动态分配和重新分配指针,但这超出了问题的范围)与其静态地指定2D数组,不如指定指针数组,然后为添加到数组中的每个字符串分配内存。虽然首选fgets
或getline
,但使用scanf
分配内存没有错。(注意:当前版本的scanf
在分配转换说明符之前使用m
,windows和早期版本使用a
)。当使用scanf
进行分配时,scanf
需要一个char**
类型的指针参数来保存分配的字符串。当分配内存时,无论如何,当不再需要时,您负责释放内存。考虑到这一点,您的代码可以d应写如下:
#include <stdio.h>
#include <stdlib.h>
#define MAXD 64
int main() {
char *string[MAXD];
int line = 0;
int i = 0;
printf ("\nHome many lines: ");
scanf ("%d%*c", &line);
if (line > MAXD) { /* validate line <= MAXD pointers */
fprintf (stderr, "warning: request exceeds %d limit.\n", MAXD);
line = MAXD;
}
/* scanf will allocate if given 'm' ('a' on Win & earlier versions)
as part of the specification before the conversion specifier */
for (i = 0; i < line; i++) {
printf ("\n input: ");
scanf ("%m[^\n]%*c", &string[i]);
}
printf ("\nYou entered:\n\n");
for (i = 0; i < line; i++)
printf (" string[%d] : %s\n", i, string[i]);
printf ("\n");
/* free the memory allocated by scanf */
for (i = 0; i < line; i++)
free (string[i]);
return 0;
}
您可以通过调整MAXD
define来调整指针的数量。(您也可以根据需要动态分配和重新分配指针,但这超出了问题的范围)抱歉,Stackoverflow不是为您工作的。请编写您自己的代码。如果遇到特定问题,请返回,发布代码并提出特定问题。请重试……我这样做了,但它不起作用。这是我的代码请更新您的问题(单击问题正文底部的“编辑”)。不要将其添加到注释中,因为它无法格式化,可能会被其他人遗漏。请更详细地描述您的问题(不仅仅是“它不工作”)。例如示例输入、预期输出和实际输出。或者您的程序显示的任何错误行为。请参阅。不要使用它。一个问题是scanf(“%d”,&line)
在输入缓冲区中留下一个换行符。第一个get()
-应该是fgets()
-读取换行符。另一个问题是您没有初始化字符串
指向任何存储;您应该使用字符字符串[4096];
或类似内容。抱歉,Stackoverflow不是为您工作的。请编写您自己的代码。如果遇到特定问题,请返回,发布代码并提出特定问题。请重试……我这样做了,但不起作用。这是我的代码请更新您的问题(单击问题正文底部的“编辑”)。不要将其添加到注释中,因为它无法格式化,可能会被其他人遗漏。请更详细地描述您的问题(不仅仅是“它不工作”)。例如示例输入、预期输出和实际输出。或者您的程序显示的任何错误行为。请参阅。不要使用它。一个问题是scanf(“%d”,&line)
在输入缓冲区中留下一个换行符。第一个get()
-应该是fgets()
-读取换行符。另一个问题是您没有初始化字符串
指向任何存储;您应该使用字符字符串[4096]
或类似的东西。我将它的char*string改为char string[1000]。但它仍然使用(n-1)行并只打印最后一行。string
应该是2-D
数组。char string[1000]
将只存储输入的一行,这是最后一行。使用char string[x][y]并更改get()对scanf
scanf()不起作用,因为它会在第一次出现任何空白时停止。建议使用fgets()我将其更改为c