Mein Programm überspringt den nächsten Eingang nach 1 Durchlauf. Ich habe die Threads beim Entfernen des Zeilenumbruchs-Zeichens gelesen, das fgets hat, aber nichts that wassuggested worked. Gibt es etwas, das mit Microsoft Visual Studio funktionieren würde? Der beste Vorschlag war "words [strcspn (words, \ r \ n")] = 0; " und das hat die neue Zeile nicht entfernt, es sei denn, ich formatiere es falsch. Ich darf die STRTOK-Funktion nicht verwenden.C: Das Programm überspringt den nächsten Eingang
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 50
#define STOP "quit\n"
char *copywords(char *dest, const char *source, size_t n);
int main(void)
{
char words[50];
char newwords[50];
size_t num;
for (;;) {
printf("\nType a word, or type 'quit' to quit: ");
(fgets(words, SIZE, stdin));
if (strcmp(words, STOP) == 0) {
printf("Good bye!\n");
return 0;
}
printf("Type the # of chars to copy: ");
scanf_s("%d", &num);
copywords(newwords, words, num);
printf("The word was %s\n", words);
printf("and the copied word is %s", newwords);
}
}
char *copywords(char *dest, const char *source, size_t n) {
size_t i;
for (i = 0; i < n && source[i] != '\0'; i++) {
dest[i] = source[i];
}
dest[i] = '\0';
return dest;
}
führen Sie Ihr Programm in einem Debugger (und durch Ausführen ich meine Einzelschritt) – KevinDTimm
'scanf_s ("% d ", &num);' hinterlässt eine 'newline' im Eingabepuffer, die als die leere Zeichenfolge durch die nächste' gesammelt wird fgets. Bitte mischen Sie Ihre Eingabemethoden nicht: Verwenden Sie 'fgets', gefolgt von' sscanf' für den 'int', anstelle von' scanf_s ("% d", &num); '. BTW der MSVC' scanf_s' ist wirklich nicht besser als das 'scanf', ebenso leicht zu fälschen. –
Auch' size_t num; '->' int num; '(weil für' scanf_s ("% d", &num); ') – BLUEPIXY