c++跳过if和for循环

c++ skipping the if and for loops?

本文关键字:for 循环 if 跳过 c++      更新时间:2023-10-16

我正在编写一个程序,该程序将接受用户的文件,并根据文件中的数据进行一些计算。第一行包含多项答案测试的正确答案(共有6个问题)。第二行包含学生ID,第三行包含学生答案,第四行包含新的学生ID,然后是答案等。

我需要浏览文件,选择正确的答案,并将学生的答案与之进行比较。然后,为每个学生显示学生ID,每个问题的对错和空格数(?)。

这是我下面的代码,我被卡住了,因为程序跳过了循环,我不知道该怎么办?

#include <iostream>  // include to use cin and/or cout
#include <fstream>   // include to use ifstream
using namespace std;
int main ()
{
int id, c, w, mis, s, numberL;
string answer, a, correct;
string info[numberL];
char question [] = {'?'};
cout << " enter file " << endl;
cin >> a;
ifstream myfile(a.c_str());
myfile >> answer;  
s = 0;
while (s <= numberL)
{
  myfile >> info[s];
  s++;
}
for (int i =3; i < numberL; i = i+2)
{
  if ( numberL == answer[1])
  {
     c = c+1;
  }
  if ( numberL == question [1])
  {
     mis = mis+1;
  }     
  if ( numberL != answer [1] || numberL != question [1] )
  {
     w = w+1;
  }
}
printf("Student #    1    2    3   4   5   6  Mark    %n");
cout << c << endl;
cout << w << endl;
cout << mis << endl;
cout << answer ; 
} 

.txt文件中的数据如下:

AACBEE
1093345
BADBEE
1234567
ACCBEE
8123345
BAC?BE
1234566
A?B?EE

看看这个代码

int id, c, w, mis, s, numberL;
string answer, a, correct;
string info[numberL];

在你看来,数字L包含什么?文件中的行数?(我猜在这里)课程数量?不管它应该是什么,你都需要设置它。看看第三行——你告诉编译器分配那么多行——它不知道你的意思是多少行。循环同样混淆

这不是一个语言问题,而是一个程序设计问题——数字L是什么意思?

这段代码不应该编译的注释是不对的。这取决于编译器选项。通常都会。根据这个问题编写并执行了代码。发生的情况是,标准的C有些不忙的地址指向新声明的整数。这意味着您的整数将具有随机值

int id, c, w, mis, s, numberL;
cout << id << " "<< c <<" "<< w <<" "<< mis <<" "<< s <<" "<< numberL<<"n";

周四晚上上完厕所后在我的电脑上:

4199344 0 4199437 0 2 32765

数字L=32765。

while (s <= numberL) {    myfile >> info[s];   s++;  }

达到32765次。它会弄乱32765字节的内存(如果您的机器上的char==byte,因为str[i]指的是字符串开始后的第i个字符),从最初的开始,未绑定地址碰巧被分配给varinfo,如果不是myfile length和smart<lt;实施我不确定它有时是否真的会。可能会也可能不会导致错误(segfault)

for (int i =3; i < numberL; i = i+2)

检查3<32765.没错。作品约16381次。中为真(99.9999.%)

if ( numberL != answer [1] || numberL != question [1] )
{
  w = w+1;
}

它将w=4199437的"初始"值修改为类似425的smth…

程序输出(带输入"a"):

4199344 0 4199437 0 2 32765
enter file 
a
Student #    1    2    3   4   5   6  Mark    %
0
4215818
0

你看不到第4行,因为

字符串答案,a,不正确;

默认为"-空字符串,并且我没有要输入的文件。