程序制作空白输出文件,C

时间:2018-12-26 08:37:25

标签: c arrays for-loop

我有一个小程序,当输入时会反转单词,但是由于某种原因,第一个输入被输出为空白,而用户不允许输入任何内容。对于任何数量的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

2 个答案:

答案 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