C在循环中没有printf

时间:2018-12-10 15:16:55

标签: c for-loop printf

我是C语言新手,正在做一些基本的事情。 我正在做一个简单的测验,由于某种原因,当我尝试打印问题的选项时,它不起作用。

main.c

#include <stdio.h>
#include "app.h"

int main(void){
    startQuiz();
    return 0;
}

app.h

#include <stdio.h>
#include <stdlib.h>


int Question(char text[100], char options[4][40], int rightAns);

void startQuiz(void){
    char q1[4][40] = {
        {'"', 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '"'},
        {'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'},
        {'p', 'r', 'i', 'n', 't', '(', '\'', 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '\'', ')'},
        {'\'', 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '\''}
    };

    char q2[4][40] = {
        {'g', 'e', 't', '_', 't', 'y', 'p', 'e', '(', 'x', ')'},
        {'p', 'r', 'i', 'n', 't', '(', 'x', ')'},
        {'x', '.', 't', 'y', 'p', 'e'},
        {'t', 'y', 'p', 'e', '(', 'x', ')'}
    };

    char q3[4][40] = {
        {'x'},
        {'h', 'e', 'l', 'l', 'o', '_', 'w', 'o', 'r', 'l', 'd'},
        {'e', 'x', 'e', 'c'},
        {'c', 'o', 'm', 'm', 'a', 'n', 'd'}
    };

    int Q1 = Question("what is the output of `print('hello world')`", q1, 2);
    int Q2 = Question("how to get a type of a variable?", q2, 4);
    int Q3 = Question("choose a not valid name for argument in python", q3, 3);

    printf("you got: %d / 3\n", Q1 +Q2 +Q3);
};


int Question(char text[100], char options[4][40], int rightAns){
    int ans;

    printf("\n%s.\n", text);
    for(int i; i<4; i++){
        printf("%d. %s\n", i+1, options[i]);
        // I dont want to add to i I just want to print i+1

    }printf(">>> ");
    scanf("%d", &ans);

    if(ans==rightAns){
        return 1;
    }return 0;
};

应该是一个测验,我得到的输出是:

enter image description here

它不打印我给它的选项:

1 个答案:

答案 0 :(得分:2)

for(int i; i<4; i++){

由于您没有为i分配值,因此它可以有任何值。这就是未定义的行为。您应该始终确保变量在使用之前具有值。

这应该可以解决您的代码...

for(int i=0; i<4; i++){

此外,初始化选项的方式确实很难看懂。您可以输入字符串,而不是列出每个字符。

char q1[4][40] = {
    "\"hello world\"",
    "hello world",
    // etc....
};