Код немецкий, но в данном случае это не имеет значения:
У меня есть известная проблема с новой строкой scanf () (хотя она известна, я не смог найти никакого решения). Я видел этот код в видео на YouTube, и в видео код работал. Но на моем ПК код не работает, потому что моя функция scanf () не распознает, что я хочу ввести свою строку после нажатия «ENTER». Строка, о которой я говорю, комментируется как «ПРОБЛЕМА ЗДЕСЬ»
//
// main.c
// list
//
// Created by Programmieren on 28.04.18.
// Copyright © 2018 Semih. All rights reserved.
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct todo{
char aufgabe[100];
int tag;
int monat;
int jahr;
struct todo *next;
};
void leerePuffer()
{
char ch;
while ((ch == getchar()) != '\n' && ch != EOF);
}
//Prototyp
void ausgabe(struct todo *anfang);
struct todo *neues_element(struct todo *anfang);
int main(int argc, const char * argv[]) {
int wahl;
struct todo *anfang = NULL;
do
{
printf("Menu\n");
printf("1 - Ausgeben der ToDo's\n");
printf("2 - Eingeben eines neuen Elements\n");
printf("0 - Beenden\n");
printf("Bitte geben Sie ihre Wahl ein: ");
scanf("%d", &wahl);
switch (wahl)
{
case 1:
ausgabe(anfang);
break;
case 2:
anfang = neues_element(anfang);
break;
case 0:
break;
default:
printf("Keine gültige Auswahl\n");
break;
}
}
while (wahl != 0);
return 0;
}
void ausgabe(struct todo *anfang)
{
struct todo *aktuell = anfang;
int counter = 0;
while (aktuell != NULL)
{
counter++;
printf("%02d: %50s %02d.%02d.%04d\n", counter, aktuell->aufgabe, aktuell->tag, aktuell->monat, aktuell->jahr);
aktuell = aktuell->next;
}
}
struct todo *neues_element(struct todo *anfang)
{
struct todo *neu = NULL;
neu = (struct todo *)malloc(sizeof(struct todo));
if (neu == NULL) {
printf("Kein Speicher mehr da!\n");
return anfang;
}
else{
printf("Geben Sie die Daten ein:\n");
printf("Aufgabentext: \n");
leerePuffer();
//THE PROBLEM IS HERE: !!!!!!!!!!!!!!!!!!!!##############
scanf("%99[^\n]", neu->aufgabe);
printf("Deadline Tag: ");
scanf("%d", &(neu->tag));
printf("Deadline Monat: ");
scanf("%d", &(neu->monat));
printf("Deadline Jahr: ");
scanf("%d", &(neu->jahr));
neu->next = anfang;
return neu;
}
}