1.实际上我想首先给出一个数字N(我要输入的字符串数量)作为输入,然后在下一行使用gets()给出一个字符串。但是当我按下回车然后输入no。我可以输入的字符串是N-1.我尝试使用printf(“\ n”)但它没有用。请任何人都可以帮助我。
//code
int N,i,arr[N];
char str[50];
scanf("%d",&N) //no. of strings required
for(i=0;i<N;i++)
{
gets(str);
arr[i]=strlen(a);
}
for(i=0;i<N;i++)
{
printf("%d\n",arr[i]);
}
我想输入我的输入:
2 //no. of strings
ABCFD //string 1
ASWD //string 2
//But actually what i am getting using printf("\n")
并输出:
5
4
但我得到的是:
2
//blank space
ASWD //string 2
和输出
0
4
答案 0 :(得分:1)
输入N
的值后,输入缓冲区中仍然存在newline
,以下gets
将其接受为空白输入。在任何情况下,gets
都是不推荐使用的功能:请使用fgets
,例如这样。我打印了每个条目,以显示每个条目末尾有一个newline
,并删除了该换行符。
#include <stdio.h>
#include <string.h>
int main(void) {
int N, i;
char str[50];
printf("Enter number of cases\n");
scanf("%d%*c", &N); // read newline too, but discard
for(i=0; i<N; i++)
{
printf("\nEnter string\n");
if (fgets(str, sizeof str, stdin) == NULL)
return 1;
printf("Shows newline >>%s<<\n", str); // show that newline is retained
str [ strcspn(str, "\r\n") ] = 0; // remove trailing newline
printf("After removal >>%s<<\n", str); // show that newline was removed
}
return 0;
}
节目输出
Enter number of cases
2
Enter string
one
Shows newline >>one
<<
After removal >>one<<
Enter string
two
Shows newline >>two
<<
After removal >>two<<
答案 1 :(得分:0)
试一试 -
int lineNumbers;
scanf("%d", &lineNumbers);
char **linesOfString = (char**) malloc(lineNumbers * sizeof(char *));
int i;
for(i = 0; i < lineNumbers; i++) {
fflush(stdin);
linesOfString[i] = (char *) malloc(255 * sizeof(char));
scanf("%s", linesOfString[i]);
}
for(i = 0; i < lineNumbers; i++) {
printf("%s", linesOfString[i]);
}
free(linesOfString);
return 0;
答案 2 :(得分:-1)
听起来你没有得到预期的字符串数量,这是正确的吗?
如果是这种情况,请查看循环代码。
最有可能的新手错误是索引。 C中的数组为0索引。
这意味着如果你有int test [3],那么test的索引将是0,1和2.这意味着最高索引将是N-1。
因此,请确保您接受的第一个字符串被放入索引0,而不是索引1。