2016-11-07 52 views
-4

我剛剛寫了一個程序,它假設返回出現最多/最少的字符。在沒有switch語句的測試過程中進行編程工作,但是當我添加它時開始崩潰。你能看看嗎?使用開關後簡單的程序崩潰 - C

主要功能

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

int main(int argc, char *argv[]) { 
    int count[256] = { 0 }; 
    int c; 
    while ((c=getchar())!=EOF){ 
     count[c]++; 
    } 
    switch (argv[1][1]) { 
    case 'm': case 'M': 
     mostOften(count); 
     break; 
    case 'l': case 'L': 
     leastOften(count); 
     break; 
    default: 
     mostOften(count); 
     break; 
    } 
    return 0; 
} 

工具功能

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

void mostOften(int *s) { 
    int j; 
    int max, cha; 
    for(j=32; j<126; j++){ 
     if(s[j]>max) { 
       max=s[j]; 
       cha=j; 
     } 
    } 
    printf("char %c: %d times\n", cha, max); 
} 

void leastOften(int *s) { 
    int j; 
    int min=10000, cha; 
    for(j=32; j<126; j++){ 
     if(s[j] && s[j]<=min) { 
       min=s[j]; 
       cha=j; 
     } 
    } 
    printf("char %c: %d times\n", cha, min); 
} 
+3

switch語句 – saygins

+1

前加上'如果(ARGC> 1)'語句,因此不是一個調試服務。編譯符號,在調試器中運行代碼,逐行跟蹤程序,檢查相關變量的值,以瞭解實際發生的情況。如果出現*特定*問題,請隨時返回此處。 – alk

回答

3

您使用max未初始化,因此,閱讀垃圾:

int max, cha; 
for(j=32; j<126; j++){ 
    if(s[j]>max) { 

此外,您還需要檢查是否使用它之前存在argv[1][1]

switch ((argc > 1 && argv[1][0]) ? argv[1][1] : 0) { 
+1

謝謝,但它沒有幫助崩潰。 – Struziu

+1

你如何在控制檯上啓動你的程序? –

+0

使用_Build和run_選項。我雖然我沒有關係,因爲有默認選項。 – Struziu