我有一个小程序,当输入时会反转单词,但是由于某种原因,第一个输入被输出为空白,而用户不允许输入任何内容。对于任何数量的n,这种情况都会发生,并且我一直在处理for循环(我认为是错误),但是我还没有设法解决这个问题。
感谢提前和节日快乐!
代码:
int main()
{
int n;
printf("How many strings would you like to insert?\n");
scanf("%d",&n);
n=n+1;
char s[n][100];
printf("Insert %d strings\n", n-1);
for(int i=0; i<n; i++) {
gets(s[i]);
}
for (int i = 0; i <n ; i++) {
reverseWords(s[i]);
printf("The number %d Sentence is %s\n", i+1, s[i]);
}
return 0;
}
输入/输出:
How many strings would you like to insert?
3
Insert 3 strings
hello whats up
bye dude
The number 1 Sentence is
The number 2 Sentence is up whats hello
The number 3 Sentence is dude bye
Process finished with exit code 0
编辑:
我设法自己找到了解决方法。对这个修复有何想法?
int main()
{
int n;
printf("How many strings would you like to insert?\n");
scanf("%d",&n);
char s[n][100];
printf("Insert %d strings\n", n);
for(int i=0; i<n+1; i++) {
gets(s[i]);
}
for (int i = 1; i <n+1 ; i++) {
reverseWords(s[i]);
printf("The number %d sentence in reverse is %s\n", i, s[i]);
}
return 0;
}
新输出: “ C \ Question 1 \ cmake-build-debug \ CLion.exe中的G:\ UoM \ Second Year \ Programming原理” 您想插入多少个字符串? 3
Insert 3 strings
Hello Carl whats up?
Dude Whats giong on?
wow nice!
The number 1 sentence is up? whats Carl Hello
The number 2 sentence is on? giong Whats Dude
The number 3 sentence is nice! wow
答案 0 :(得分:0)
请尝试如下修改您的for循环。这将帮助您获得预期的输出
for (int i = 1; i <n ; i++)
{
reverseWords(s[i]);
printf("The number %d Sentence %s\n", i, s[i]);
}
答案 1 :(得分:0)
首先don't use gets()。而是使用fgets()。
由于换行符保留在输入流中,因此出现了问题。输入字符串数时,请输入数字并按ENTER
键。因此,输入流中有3\n
,其中 [3
是输入的字符串数] 。 scanf()
将读取3
,但不读取其后的换行符。该换行符将保留在输入流中。 gets()
调用后,它立即读取该换行符。 gets()
读取直到到达换行符或文件末尾为止,并且如果找到换行符,它将读取但不将其复制到缓冲区,并且将终止的空字符附加到缓冲区。因此,您将第一个字符串作为空字符串。
您的问题的一个快速解决方案是在getchar()
之后立即调用scanf()
,这将消耗流浪换行符。但这也不是完美的解决方案。请勿混淆scanf()
和gets()
或其他输入功能。也许您可以考虑在程序中始终使用fgets()
。对于输入的字符串数,您可以使用strtol()
或sscanf()
将字符串转换为数字。
注意:如果使用fgets()
,请记住它将换行符视为有效字符,并将其包含在复制到传递给缓冲区的字符串中。确保删除尾随换行符。选中this。