For statement не работает так, как я хотел в моей программе на языке Си
Я видел простую программу на языке Си, которая подсчитывает, сколько раз каждая цифра от 0 до 9 появляется в тексте. Это звучит так:
#include stdio.h int main(void) { int c, i, nwhite, nother; int ndigit[10] nwhite = nother = 0; for (i=0; i<10; ++i) { ndigit[i]=0; } while ((c = getchar()) != EOF ) { if (c>='0' && c<='9') ++ndigit[c-'0']; else if (c==' ' || c =='\t' || c=='\n') ++nwhite; else ++nother; } printf("digits ="); for (i = 0; i < 10; ++i) printf("%d ", ndigit[i]); printf(", white space is %d, other is %d\n", nwhite, nother); return 0; }
Я использую Dev-C 5.11 в своей Windows XP.Он компилируется без проблем, но когда я пытаюсь запустить его, он не показывает всех результатов, которые должен. Он печатает первые 4 или 5 элементов массива (но никогда не одинаковое их количество, даже если я пишу точно такие же слова) и вообще не печатает пробелы и другие вещи. После тестирования я понял, что если я поставлю последний for, тот, который печатает элементы массива ndigit, то остальная часть программы будет работать без ошибок.
Вы знаете, почему это происходит?
Что я уже пробовал:
Я пробовал менять for с while, и результаты были те же. Однажды это сработало нормально, но когда я снова набрал те же самые слова, это не сработало.Он печатает только первые 5 или 6 элементов ndigit.
Jochen Arndt
После исправления ошибок, которые приводят к ошибкам компиляции, он отлично работает при компиляции с GCC на Ubuntu (Dev-C тоже использует GCC).
Ошибки заключаются в следующем:
- stdio. h должен быть заключен в двойные кавычки или угловые скобки
- После объявления 'int ndigit[10]'отсутствует точка с запятой
CPallini
Мой (виртуальный) 5.
Bill the eternal
У меня была точка с запятой и скобки в программе, просто я не скопировал ее сюда. Мой плохой, но спасибо!
Richard MacCutchan
Отлично работает и в VS 2010.
Bill the eternal
Это прекрасно работает, если я использую готовый текст вместо того, чтобы вводить его в cmd.
Итак, проблема решена, большое вам спасибо за Ваши советы и Ваше время!