2014-12-31 16 views
6


terminalde hiçbir çıkışı (Head First C)

Ben Head First C kitaptan bazı egzersizler yaşıyordu. Ve bir jukeBox programı var.
Kaynak burada: Ben derlemek ve gcc sürümü ile programın çıktısını görmek için terminalini kullanıyorum

#include <stdio.h> 
#include <string.h> 

char tracks[][80] = { 
    "I left my heart in Harvard Med School", 
    "Newark, Newark - a wonderful town", 
    "Dancing with a Dork", 
    "From here to maternity", 
    "The girl from Iwo Jima", 
}; 

void find_track(char search_for[]){ 
    int i; 

    for (i = 0; i < 5; i++) { 
     if (strstr(tracks[i], search_for)) 
      printf("Track %i: '%s'\n", i, tracks[i]); 
    } 
} 
int main(){ 
    char search_for[80]; 
    printf("Search for: "); 
    fgets(search_for, 80, stdin); 
    find_track(search_for); 

    return 0; 
} 

4.8.2 gibi:

gcc pr.c -o pr 

Ve program çalıştırmayı denediğinizde ve arama dizgisini giriyorum çıktı almam. Program sadece yürütme ve çıkışları bitirir.

Ayrıca ben ideone.com here bu kodu derlemek çalıştı bahsetmek istiyorum.
Hangi sorunlar olabilir? Terminal hiç çıkış göstermiyor.

+1

birkaç farklı sorunlar olabilir. İlk tahminde (çok pasif C becerilerimle) yanlış dizgeyi (örneğin mektuba saygı göstermemek) girmeniz olabilir. Belki de bu tür bir olası hatayı önlemek için önce çok daha basit iplerle denemelisiniz. –

+3

Vay. Sorunun tam tanımı ve hatta ideone bir bağlantı. Düzgünce "hata ayıklamanıza yardım et" soruları bu günlerde çok nadirdir. – luk32

+1

Çok kötü bir tam kopya. Yinelenen düzgün cevaplanmadı, ancak önerilen düzeltme iyi. – usr2564301

cevap

7

fgets yeni satırı okur ve tampon koydu. Yani yazdığınız dize hiçbir zaman dizide bulunamadı. Aşağıdaki gibi girdiden sonra yeni satırı bastırmak için kodu değiştirin: search_for[strlen(search_for)-1]='\0';. Bu daha iyi çalışmalı. fonksiyonunu çağırmadan önce bu kod

+0

Not * sadece * bunu yaparken, arabayı tamamen doldurmadığınızdan veya EOF düğmesine basmadığınızdan emin olunuz. – usr2564301

+3

Olmalı (search_for [strlen (search_for) -1] == '\ n') search_for [strlen (search_for) -1] = '\ 0'; ' –

+1

Oh Cevabınızı yakında kabul edeceğim ve Bunun kitabın aynen kaynak kod olduğunu ve bunu bilmediğimi söyle çok teşekkürler! –

0

Yeri.

search_for[strlen(search_for)-1]='\0'; 

Doğru çıktıyı alacaksınız. o adım-adım ayıklamaya denemek ve davranışlarını gözlemlemek için daha iyi olurdu böylece