【问题标题】:Printing line by line using a for loop then scanning to another in c使用for循环逐行打印,然后在c中扫描到另一个
【发布时间】:2018-04-18 06:35:17
【问题描述】:

在下面的数组中,我存储了 11 个问题。我希望每个问题都被一一询问,然后将答案复制到 arrray ans1。目前,while 循环同时打印整个文件。有人可以阐明我如何使用 while 循环下方的 for 循环来完成此操作吗?

  typedef struct{
  char q[40][250];
  char a[40][250];
  } qa;

  int main()
  {   

     char *b [40][250];
     int w, e, r, t, k, l;
     char a1[40][250];

     FILE *fp;
     fp = fopen("quest.txt", "r");

     while (fgets(b, sizeof(b), fp)) {
           printf("%s", b);
           scanf("%s",a1[1+]);
     }

     for(l>=0;l<=40;l++){
     ;}

【问题讨论】:

  • 检查输入函数调用scanf()的返回值。
  • 一个好的编译器应该对你的代码发出警告甚至错误。 fgets 函数需要一个指向 characters 数组的第一个元素的指针作为第一个参数,而不是指向 array 字符的指针。
  • 另外,e的初始值是多少?提示:你不知道,因为它是不确定的(而且看起来是随机的)。因此将其用作数组索引将导致undefined behavior,这使得任何关于行为的讨论或猜测都毫无用处。
  • 最后,一个数组的有效索引范围是多少,例如40 元素?顶部索引是not 40。如果您应该使用 l 作为任何数组的索引,这会使第二个循环中的循环条件错误。请注意,l 的初始化不会初始化任何东西。或许你应该买几本入门书籍,从头开始?

标签: c arrays loops for-loop


【解决方案1】:

有几个问题,例如未初始化的变量(例如el)、读入错误的数据结构(fgets(b,... 而不是fgets(b[x],...)。

请参阅以下代码片段,它可能会帮助您更进一步。 请注意,我使用fgets 阅读答案;这允许您 - 与 scanf("%s") 相比 - 输入多个单词作为答案(即直到您按下“输入”):

希望对你有帮助。

 char b [40][250];
 char a1[40][250];

 FILE *fp;
 fp = fopen("quest.txt", "r");

int nrOfQuestions = 0;
while (nrOfQuestions < 40 && fgets(b[nrOfQuestions], sizeof(b[0]), fp)) {
    printf("%s", b[nrOfQuestions]);
    fgets(a1[nrOfQuestions],sizeof(b[0]), stdin);
    nrOfQuestions++;
}

for (int i=0;  i<nrOfQuestions; i++) {
    printf("q:%s a:%s\n", b[i], a1[i]);
}

【讨论】:

    猜你喜欢
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多