gpt4 book ai didi

c - 在结构数组中输入字符的循环无法正常工作

转载 作者:行者123 更新时间:2023-11-30 17:30:47 25 4
gpt4 key购买 nike

词典程序应将用户输入的单词读取为“单词”或“定义”。唯一的问题是,对于循环的第一个实例,readLine 函数似乎没有被调用,并且只有当单词必须存储在dictionary[0].word 中时才会发生这种情况。它会跳过让用户输入条目 #1 的单词。

我该如何解决这个问题?

// Enter words with their corresponding definitions

#include <stdio.h>

struct entry
{
char word[15];
char definition[50];
};



int main (void)
{
int numberEntries;

void inputEntry (struct entry dictionary[], int numberEntries);


printf ("How many dictionary entries do you want to enter?.\n");
scanf ("%i", &numberEntries);

struct entry dictionary[numberEntries];

inputEntry (dictionary, numberEntries);

return 0;

}




void inputEntry (struct entry dictionary[], int numberEntries)
{
void readLine (char buffer[]);
int i;

for ( i = 0; i < numberEntries; i++ ) {
printf ("Entry #%i:\n", i + 1);
printf ("Word: ");
readLine (dictionary[i].word);

printf ("Definition: ");
readLine (dictionary[i].definition);

printf ("\n");
}

for ( i = 0; i < numberEntries; i++ ) {
printf ("\n%s", dictionary[i].word);
printf ("\n%s", dictionary[i].definition);

}

}

// Get a string and save it in an array

void readLine (char buffer[])
{
char character;
int i = 0;

do
{
character = getchar ();
buffer[i] = character;
i++;
}
while ( character != '\n' );

buffer[i - 1] = '\0';
}

最佳答案

您混合使用了 scanfgetchar 这令人困惑。 scanf读取键入的整数,然后下一个 getchar 将读取 Enter 按键:一个\n

针对您的情况,最简单的解决方案是使用 readLine 而不是 scanf

您还可以考虑使用标准函数fgets,而不是编写自己的readLinefgets 更好,因为您的函数不会对 buffer 参数进行边界检查,如果您在一行中输入太多字符,则会导致缓冲区溢出。

关于c - 在结构数组中输入字符的循环无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24947282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com